###1.所用到的知識點
###2. 效果
###3.**
import uikit
var window: uiwindow?
let view = window!.rootviewcontroller!.view!
let logolayer = calayer()
logolayer.bounds = cgrect(x: 0, y: 0, width: 100, height: 100)
logolayer.position = view.center
logolayer.contents = uiimage(named: "logo")?.cgimage
view.layer.mask = logolayer
let shelterview = uiview(frame: view.frame)
shelterview.backgroundcolor = .white
view.addsubview(shelterview)
window?.backgroundcolor = uicolor(red: 29 / 255.0, green: 161 / 255.0, blue: 242 / 255.0, alpha: 1)
let logoanimation = cakeyframeanimation(keypath: "bounds")
logoanimation.begintime = cacurrentmediatime() + 1
logoanimation.duration = 1
logoanimation.keytimes = [0, 0.4, 1]
logoanimation.values = [nsvalue(cgrect: cgrect(x: 0, y: 0, width: 100, height: 100)),
nsvalue(cgrect: cgrect(x: 0, y: 0, width: 85, height: 85)),
nsvalue(cgrect: cgrect(x: 0, y: 0, width: 4500, height: 4500))]
logoanimation.timingfunctions = [camediatimingfunction(name: kcamediatimingfunctioneaseout),
camediatimingfunction(name: kcamediatimingfunctiondefault)]
logoanimation.isremovedoncompletion = false
logoanimation.fillmode = kcafillmodeforwards
logolayer.add(logoanimation, forkey: "zoomanimation")
let mainviewanimation = cakeyframeanimation(keypath: "transform")
mainviewanimation.begintime = cacurrentmediatime() + 1.1
mainviewanimation.duration = 0.6
mainviewanimation.keytimes = [0, 0.5, 1]
mainviewanimation.values = [nsvalue(catransform3d: catransform3didentity),
nsvalue(catransform3d: catransform3dscale(catransform3didentity, 1.1, 1.1, 1)),
nsvalue(catransform3d: catransform3didentity)]
view.layer.add(mainviewanimation, forkey: "transformanimation")
view.layer.transform = catransform3didentity
uiview.animate(withduration: 0.3, delay: 1.4, options: .curvelinear, animations: )
return
true
}複製**
###4.cakeyframeanimation的屬性解析 cakeyframeanimation關鍵幀動畫,也是capropertyanimation的子類,與cabasicanimation的區別是:cabasicanimation只能從乙個數值(fromvalue)變到另乙個數值(tovalue),而cakeyframeanimation會使用乙個nsarray儲存這些數值。cabasicanimation可看做是只有2個關鍵幀的cakeyframeanimation。屬性解析:
停止正在進行的動畫動畫一般都是正常進行直到他們完成,但是我們也能夠提前停止動畫,如果需要提前停止動畫,我們可以使用下列方法之
去除layer上單一的動畫物件,呼叫layer的removeanimationforkey: 方法去除動畫物件,該方法對應layer的addanimation:forkey:方法新增動畫物件,key值不能夠為nil,並且相同。 2.去除layer上所有的動畫物件,通過呼叫layer的removeallanimations方法,該方法將立馬去除所有當前執行的動畫並且重繪當前layer的狀態資訊。注意:不能夠直接去除隱式動畫。當去除layer上的動畫物件時,core animation將使用layer當前的values進行重繪,因為當前值是動畫的最後值,這能夠導致layer顯示突然的跳動,如果想要layer的顯示保持最後一幀動畫,你能夠使用物件的圖層樹來獲取最終的值,並設定layer樹物件。對於更多暫時停止動畫,可以多動畫部分同時進行如果想要對layer物件同事使用多個動畫,我們能夠使用caanimationgroup物件,使用群組動畫物件能夠非常方便的管理多個動畫物件。設定timing and duration屬性值將取代當個動畫對應的屬性值。 更高階的方式對於組合動畫可以使用事務物件,事務將通過更多便利的方式來建立巢狀動畫並且可以為每乙個賦值不同的動畫引數。對於更多詳情的事務資訊,可以看explicit transactions let you change animation parameters.檢測動畫core animation支援檢測動畫的開始和結束,這些通知是非常有利於處理與動畫相關的任務。例如:你可能使用開始的通知設定一些相關的開始資訊而且使用結束通知來資訊處理這些狀態資訊。這裡有兩種不同的方式通知有關於動畫的狀態: 1.新增block到當前事務(transaction)當中使用setcompletionblock:方法,當所有的動畫在事務中完成,transaction將執行你的block。 2.設定**物件,實現**方法animationdidstart: andanimationdidstop:finished:。 如果你想束縛兩個動畫,實現單乙個動畫完成又立馬開始另外乙個動畫,並且不想使用動畫通知操作。那麼可以使用begintime屬性,這是每乙個動畫開始的時間,為了實現乙個動畫完成又立馬開始另外乙個動畫,可以設定第二個動畫的開始時間是第乙個動畫的結束時間。對於更多的資訊可以看customizing the timing of an animation.
Swift基礎學習
swift基礎學習 這個 最近看了一下,對於基本語法解釋概括的相對全面,如同重新練習一遍oc似的,挺全面的,謝謝原文 1 陣列內容型別鎖定時 原文方法 var strarray string 我是 字串的陣列 現在方法 var strarray string 我是 字串的陣列 當然 var stra...
Swift學習筆記 三十五 泛型 下
定義乙個協議時,宣告乙個或多個關聯型別作為協議定義的一部分將會非常有用。關聯型別為協議中的某個型別提供 乙個佔位 符名稱,其代表的實際型別在協議被遵循時才會被指定。關聯型別通過 associatedtype 關鍵字來指定。下 例子定義 乙個 container 協議,該協議定義了乙個關聯型別 ite...
swift學習之基礎語法
一 swift的基本語法 下面來介紹swift的基本用法 在main.swift中的 import foundation println hello,world println 你好,世界!定義乙個常量,使用關鍵字 let 在swift中,幾乎對所有的基本資料型別或者是物件型別使用結構體進行了重寫 ...