Core Animation

基本概念

Core Animation 作用在 CALayer 上,CALayer從概念上類似UIView,每一個UIView都有一個layer屬性,可以通過這個layer來為更改相應view的形式,或者做動畫。

我們可以將UIView看成是一種特殊的CALayer,UIView下有一個layer屬性,這個layer層就是真正繪制UIView所要展示的東西的人。然而之所以要將CALayer封裝成UIView則是為了給其添加事件響應。

類的架構

CAAnimation是所有動畫對象的父類,實現(xiàn)CAMediaTiming協(xié)議,負責控制動畫的時間、速度和時間曲線等,為抽象類,不能直接使用。

CAPropertyAnimation屬性動畫,一般不直接使用。

CATransition轉場動畫。

CAAnimationGroup組合動畫。

CABasicAnimation基本動畫。

CAKeyFrameAnimation關鍵幀動畫。

CASpringAnimation彈簧動畫,iOS9.0之后新增類,是CABasicAnimation的子類。

CAMediaTiming協(xié)議

通過CAAnimation實現(xiàn)的協(xié)議為CAMediaTiming。

repeatCount,動畫的重復次數,可以設置為小數。設置為HUGE_VALF,表示無限重復。

repeatDuration,動畫總時長,如果大于單次時長,則重復;如果小于單次時長,則截斷。

duration,單次動畫時長。

speed,圖層或動畫模型相對于父圖層CALayer的時間流逝速度。

fillMode,有效期結束后,動畫對象的呈現(xiàn)效果是凍結還是移除。

beginTime,相對于父對象的開始時間。注意,以系統(tǒng)的絕對時間為準。例如:

timeOffset,時間軸偏移量。將時間軸移動至偏移位置,再執(zhí)行整個動畫時長。假設動畫時長3秒,偏移量為8,則開始位置為8 % 3 = 2,再執(zhí)行3秒,即在整個時長的1/ 3處結束。

CACurrentMediaTime,返回系統(tǒng)當前的絕對時間(從本次開機開始),單位秒。

CAAnimation

timingFunction動畫執(zhí)行的快慢交替。有如下幾個可選項。

kCAMediaTimingFunctionLinear//線性節(jié)奏,就是勻速

kCAMediaTimingFunctionEaseIn//淡入,緩慢加速進入,然后勻速

kCAMediaTimingFunctionEaseOut//淡出,勻速,然后緩慢減速移除

kCAMediaTimingFunctionEaseInEaseOut//淡入淡出,結合以上兩者

kCAMediaTimingFunctionDefault//默認效果

delegate代理。

- (void)animationDidStart:(CAAnimation *)anim;//動畫開始

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag; //動畫結束。flag,動畫正常播放完成返回為YES。沒有播放完成或者被移除則返回NO。

removedOnCompletion

默認為YES,代表動畫執(zhí)行完畢后就從圖層上移除,圖形會恢復到動畫執(zhí)行前的狀態(tài)。如果想讓圖層保持顯示動畫執(zhí)行后的狀態(tài),那就設置為NO,不過還要設置fillMode。

CABasicAnimation

fromValue? 開始的值

toValue? ? 結束時的值

byValue? ? 動畫過程中的值

為了防止沖突,toValue只能設置一個。

keyPath

[CABasicAnimation animationWithKeyPath:@"transform.rotation.y"]

keypath需要填寫指定的值,詳情見下列表

還有如下屬性(不完整)

CAKeyFrameAnimation?

關鍵幀動畫,提供幾個關鍵的值,中間的動畫會自動生成。

values存放“關鍵幀”,動畫會一次到達關鍵幀指定的值,并自動生成中間動畫。

path? ? 路徑,可以設置一個CGPathRef的路徑,讓圖層按照路徑移動,因此只對anchorPosition和position起作用,當設置了path會忽略掉values中的值。

keyTimes 指定到達每個關鍵幀的時間,與values對應,不設置就是平分。timingFunctions? 指定到達每一幀的速度,度values對應,可以不設置。

CAAnimationGrop

組合動畫,存放多個layer動畫。

animations數組,里面存放動畫(動畫可以是,基本動畫、關鍵幀動畫等其他動畫)里面存放的動畫可以不設置時間和重復次數,統(tǒng)一在CAAnimationGrop對象中設置。數組中動畫的duration可以單獨設置,還可以設置數組中動畫的開始時間,來控制動畫單個動畫在組動畫中的執(zhí)行時間,但是時間不能超過組動畫的時間,如果超過,該動畫不會執(zhí)行。

CATransition

轉場動畫,主要用于轉場動畫從一個場景以動畫的形式過渡到另一個場景。

type?過渡動畫的類型。

kCATransitionFade \\漸變

kCATransitionMoveIn \\覆蓋

kCATransitionPush \\推出

kCATransitionReveal \\揭開

subtype?過渡動畫的方向

kCATransitionFromRight \\從右邊

kCATransitionFromLeft \\從左邊

kCATransitionFromTop \\從頂部

kCATransitionFromBottom \\從底部

endProgress?定義過渡的結束點,結束點的值必須大于或者等于開始點。默認值為1.0。

startProgress 定義過度的開始點,開始點的值必須小于或者等于結束點。默認值為0.0。

這兩個屬性是float類型的,可以控制動畫進行的過程,可以讓動畫停留在某個動畫點上,值在0.0到1.0之間。endProgress要大于等于startProgress。比如:立方體轉,可以設置endProgress= 0.5,讓動畫停留在整個動畫的特定位置(停止在旋轉一般的狀態(tài))。

CASpringAnimation

CASpringAnimation是iOS9新加入動畫類型,是CABasicAnimation的子類,用于實現(xiàn)彈簧動畫。

mass:質量(影響彈簧的慣性,質量越大,彈簧慣性越大,運動的幅度越大)

stiffness:彈性系數(彈性系數越大,彈簧的運動越快)

damping:阻尼系數(阻尼系數越大,彈簧的停止越快)

initialVelocity:初始速率(彈簧動畫的初始速度大小,彈簧運動的初始方向與初始速率的正負一致,若初始速率為0,表示忽略該屬性)

settlingDuration:結算時間(根據動畫參數估算彈簧開始運動到停止的時間,動畫設置的時間最好根據此時間來設置)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容