基本概念
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:結算時間(根據動畫參數估算彈簧開始運動到停止的時間,動畫設置的時間最好根據此時間來設置)