- 介紹
Core Animation 是一個非常強大的動畫處理 API疮装,使用它能做出非常絢麗的動畫效果,而且往往是事半功倍缩宜,也就是說肘迎,使用少量的代碼就可以實現(xiàn)非常強大的功能。
蘋果封裝的 UIView 的 block 動畫就是對核心動畫的封裝锻煌,使用起來更加簡單妓布。
絕大多數(shù)情況下,使用 UIView 的 block 動畫能夠滿足開發(fā)中的日常需求宋梧。
一些很酷炫的動畫匣沼,還是需要通過核心動畫來完成的。
- 支持的平臺
Core Animation 同時支持 MAC OS 和 iOS 平臺
Core Animation 是直接作用在 CALayer 的捂龄,并非 UIView释涛。所以這個系列加叁,咱們是從 CALayer 開始的。
Core Animation 的動畫執(zhí)行過程都是在后臺操作的唇撬,不會阻塞主線程它匕。
- Core Animation 的繼承結(jié)構(gòu)圖
是所有動畫對象的父類,負(fù)責(zé)控制動畫的持續(xù)時間和速度窖认、是個抽象類豫柬,不能直接使用,應(yīng)該使用具體子類扑浸。需要注意的是CAAnimation 和 CAPropertyAnimation 都是抽象類烧给。
view 是負(fù)責(zé)響應(yīng)事件的, layer 是負(fù)責(zé)顯示的。
下面盜用了一張網(wǎng)絡(luò)上的圖片用來解釋繼承結(jié)構(gòu)喝噪。
繼承結(jié)構(gòu)圖
黃色的區(qū)塊是常用的屬性创夜、方法或者需要遵守的協(xié)議,灰色的是名稱仙逻。
其中 CAAnimationGroup、CABasicAnimation涧尿、CAKeyFramkeAnimation 咱們會在下次更新中寫一些小例子系奉。
- 常見屬性和使用步驟
4.1 使用步驟
通常分成三部完成:1,創(chuàng)建核心動畫對象姑廉;2缺亮,設(shè)置動畫屬性;3桥言,添加到要作用的 layer 上萌踱。就想把大象放進(jìn)冰箱需要三步一樣。哈哈~
4.2 常用屬性
就是咱們上面圖片中的小黃圖顯示的号阿。
duration:持續(xù)時間并鸵,默認(rèn)值是 0.25 秒
repeatCount: 重復(fù)次數(shù),無線循環(huán)可以設(shè)置 HUGE_VALF 或者 CGFLOAT_MAX
repeatDuration: 重復(fù)時間
removeOnCompletion: 默認(rèn)為 YES扔涧,代表動畫執(zhí)行完畢后就從圖層上移除园担,圖形會恢復(fù)到執(zhí)行動畫之前的狀態(tài)。如果想要圖層保持顯示動畫執(zhí)行后的狀態(tài)枯夜,那就設(shè)置為 NO弯汰,同時設(shè)置 fillMode 為 kCAFillModeForwards
fillMode:決定當(dāng)前對象在非 active 時間段的行為
beginTime:可以用來設(shè)置動畫延時執(zhí)行,若想延遲 2s湖雹,就設(shè)置為CACurrentMediaTIme() + 2
CACurrentMediaTIme():圖層的當(dāng)前時間
timingFunction: 速度控制函數(shù)咏闪,控制動畫運行節(jié)奏
delegate:動畫代理
4.3 animationWithKeyPath 中,常用的 keyPath
屬性名稱 類型 作用
transform.rotation.x CGFloat 或 float 繞 X 軸坐標(biāo)旋轉(zhuǎn) 角度
transform.rotation.y CGFloat 或 float 繞 Y 軸坐標(biāo)旋轉(zhuǎn) 角度
transform.rotation.z CGFloat 或 float 繞 Z 軸坐標(biāo)旋轉(zhuǎn) 角度
transform.rotation CGFloat 或 float 作用與 transform.tation.z 一樣
transform.scale CGFloat 整個 layer 的比例
transform.scale.x CGFloat x 軸坐標(biāo)比例變化
transform.scale.y CGFloat y 軸坐標(biāo)比例變化
transform.scale.z CGFloat z 軸坐標(biāo)比例變化
transform.translation CGMutablePathRef 整個 layer 的 xyz 軸都進(jìn)行移動
transform.translation.x CGMutablePathRef 橫向移動
transform.translation.y CGMutablePathRef 縱向移動
transform.translation.z CGMutablePathRef 縱深移動
opacity CGFloat 透明度, 閃爍等動畫用 摔吏。范圍是 0~1
backgroundColor CGColor 背景顏色
cornerRadius CGFloat 圓
4.4 動畫填充模式
kCAFillModeForwards: 當(dāng)動畫結(jié)束后鸽嫂,layer 會一直保持著動畫最后的狀態(tài)
kCAFillModeBackwards:在動畫開始前纵装,只需要將動畫加入了一個 layer,layer 便立即進(jìn)入動畫的初始狀態(tài)并等待動畫開始
kCAFillModeBoth:這個其實就是上面兩個合成溪胶,動畫加入后搂擦,開始之前,layer 便處于動畫初始狀態(tài)哗脖,動畫結(jié)束后 layer 保持動畫最后的狀態(tài)
kCAFillModeRemoved:這個是默認(rèn)值瀑踢,也就是說當(dāng)動畫開始前和動畫結(jié)束后,動畫對 layer 都沒有影響才避,動畫結(jié)束后橱夭,layer 會恢復(fù)到之前的狀態(tài) keyArc.calculationMode = kCAAnimationPaced;
4.5 速度控制函數(shù)
kCAMediaTimingFunctionLinear(線性):勻速,給你一個相對靜態(tài)的感覺
kCAMediaTimingFunctionEaseIn(漸進(jìn)):動畫緩慢進(jìn)入桑逝,然后加速離開
kCAMediaTimingFunctionEaseOut(漸出):動畫全速進(jìn)入棘劣,然后減速的到達(dá)目的地
kCAMediaTimingFunctionEaseInEaseOut(漸進(jìn)漸出):動畫緩慢的進(jìn)入,中間加速楞遏,然后減速的到達(dá)目的地茬暇。這個是默認(rèn)的動畫行為。 keyArc.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
是不是確實很枯燥寡喝?但是這條路本身就是大部分時間都很枯燥的啦~想逃也逃不掉糙俗。
這些屬性和方法也的確記不住,所以這一篇其實也就是自己總結(jié)整理了一下预鬓。以后再用的時候巧骚,看看自己總結(jié)的就好了。省得每次用的時候還要再去看一下文檔或者搜索了格二。