iOS動畫系列之三:Core Animation

經過前面兩篇文章,大概基本上清楚了CALayer在動畫中的做用。本宅胖在看到這篇文章的標題的時候,內心暗自捏了一下大腿。真是本身給本身挖坑不嫌大啊!bash

又不能劇透直接使用CABasic Animation,也不能用CAKeyFrame Animation和CAAnimation Group。愁死了~這麼理論的東西。網絡

1. 介紹

  • Core Animation是一個很是強大的動畫處理 API,使用它能作出很是絢麗的動畫效果,並且每每是事半功倍,也就是說,使用少許的代碼就能夠實現很是強大的功能。
  • 蘋果封裝的 UIView 的 block 動畫就是對核心動畫的封裝,使用起來更加簡單。
  • 絕大多數狀況下,使用 UIView 的 block 動畫可以知足開發中的平常需求。
  • 一些很酷炫的動畫,仍是須要經過核心動畫來完成的。

2. 支持的平臺

  • Core Animation 同時支持 MAC OS 和 iOS 平臺函數

  • Core Animation 是直接做用在 CALayer 的,並不是 UIView。因此這個系列,我們是從CALayer開始的。學習

  • Core Animation 的動畫執行過程都是在後臺操做的,不會阻塞主線程。

3. Core Animation 的繼承結構圖

  • 是全部動畫對象的父類,負責控制動畫的持續時間和速度、是個抽象類,不能直接使用,應該使用具體子類。須要注意的是CAAnimationCAPropertyAnimation 都是抽象類。
  • view是負責響應事件的,layer是負責顯示的。

下面盜用了一張網絡上的圖片用來解釋繼承結構。動畫

繼承結構圖
繼承結構圖

黃色的區塊是經常使用的屬性、方法或者須要遵照的協議,灰色的是名稱。spa

其中CAAnimationGroup、CABasicAnimation、CAKeyFramkeAnimation我們會在下次更新中寫一些小例子。線程

4. 常見屬性和使用步驟

4.1 使用步驟

一般分紅三部完成:
1,建立核心動畫對象;
2,設置動畫屬性;
3,添加到要做用的layer上。
就想把大象放進冰箱須要三步同樣。哈哈~3d

4.2 經常使用屬性

就是我們上面圖片中的小黃圖顯示的。代理

  • duration:持續時間,默認值是0.25秒
  • repeatCount:重複次數,無線循環能夠設置HUGE_VALF或者CGFLOAT_MAX
  • repeatDuration:重複時間
  • removeOnCompletion: 默認爲YES,表明動畫執行完畢後就從圖層上移除,圖形會恢復到執行動畫以前的狀態。若是想要圖層保持顯示動畫執行後的狀態,那就設置爲NO,同時設置fillMode爲kCAFillModeForwards
  • fillMode:決定當前對象在非active時間段的行爲
  • beginTime:能夠用來設置動畫延時執行,若想延遲2s,就設置爲CACurrentMediaTIme() + 2
  • CACurrentMediaTIme():圖層的當前時間
  • timingFunction:速度控制函數,控制動畫運行節奏
  • delegate:動畫代理

4.3 animationWithKeyPath中,經常使用的keyPath

屬性名稱 類型 做用
transform.rotation.x CGFloat或float 繞X軸座標旋轉 角度
transform.rotation.y CGFloat或float 繞Y軸座標旋轉 角度
transform.rotation.z CGFloat或float 繞Z軸座標旋轉 角度
transform.rotation CGFloat或float 做用與transform.tation.z同樣
---- ---- ----
transform.scale CGFloat 整個layer的比例
transform.scale.x CGFloat x軸座標比例變化
transform.scale.y CGFloat y軸座標比例變化
transform.scale.z CGFloat z軸座標比例變化
---- ---- ----
transform.translation CGMutablePathRef 整個layer的xyz軸都進行移動
transform.translation.x CGMutablePathRef 橫向移動
transform.translation.y CGMutablePathRef 縱向移動
transform.translation.z CGMutablePathRef 縱深移動
---- ---- ----
opacity CGFloat 透明度,閃爍等動畫用 。範圍是0~1
backgroundColor CGColor 背景顏色
cornerRadius CGFloat 圓角

4.4 動畫填充模式

  • kCAFillModeForwards:當動畫結束後,layer會一直保持着動畫最後的狀態
  • kCAFillModeBackwards:在動畫開始前,只須要將動畫加入了一個layer,layer便當即進入動畫的初始狀態並等待動畫開始
  • kCAFillModeBoth:這個其實就是上面兩個合成,動畫加入後,開始以前,layer便處於動畫初始狀態,動畫結束後layer保持動畫最後的狀態
  • kCAFillModeRemoved:這個是默認值,也就是說當動畫開始前和動畫結束後,動畫對layer都沒有影響,動畫結束後,layer會恢復到以前的狀態
    keyArc.calculationMode = kCAAnimationPaced;複製代碼

    4.5 速度控制函數

  • kCAMediaTimingFunctionLinear(線性):勻速,給你一個相對靜態的感受
  • kCAMediaTimingFunctionEaseIn(漸進):動畫緩慢進入,而後加速離開
  • kCAMediaTimingFunctionEaseOut(漸出):動畫全速進入,而後減速的到達目的地
  • kCAMediaTimingFunctionEaseInEaseOut(漸進漸出):動畫緩慢的進入,中間加速,而後減速的到達目的地。這個是默認的動畫行爲。
    keyArc.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];複製代碼

是否是確實很枯燥?可是這條路自己就是大部分時間都很枯燥的啦~想逃也逃不掉。指針

這些屬性和方法也的確記不住,因此這一篇其實也就是本身總結整理了一下。之後再用的時候,看看本身總結的就行了。免得每次用的時候還要再去看一下文檔或者搜索了。

--------------華麗分割線,iOS動畫系列全集連接-------------------
第一篇:iOS動畫系列之一:經過實戰學習CALayer和透視的原理。作一個帶時分秒指針的時鐘動畫(上)
第二篇:iOS動畫系列之二:經過實戰學習CALayer和透視的原理。作一個帶時分秒指針的時鐘動畫。包含了OC和Swift兩種源代碼(下)
第三篇:iOS動畫系列之三:Core Animation。介紹了Core Animation的經常使用屬性和方法。
第四篇:CABasic Animation。iOS動畫系列之四:基礎動畫之平移篇
第五篇:CABasic Animation。iOS動畫系列之五:基礎動畫之縮放篇&旋轉篇
第六篇:iOS動畫系列之六:利用CABasic Animation完成帶動畫特效的登陸界面
第七篇:iOS動畫系列之七:實現相似Twitter的啓動動畫
第八篇:iOS動畫系列之八:使用CAShapeLayer繪畫動態流量圖
第九篇:iOS動畫系列之九:實現點讚的動畫及播放起伏指示器
第十篇:實戰系列:繪製過山車場景

相關文章
相關標籤/搜索