核心動畫(一) - 概念篇

概念

1、CALayer

CALayer是個與UIView很類似的概念,同樣有backgroundColor、frame等相似的屬性,我們可以將UIView看做一種特殊的CALayer。但實際上UIView是對CALayer封裝,在CALayer的基礎上再添加交互功能。UIView的顯示必須依賴於CALayer。

我們同樣可以跟新建view一樣新建一個layer,然後添加到某個已有的layer上,同樣可以對layer調整大小、位置、透明度等。
一般來說,layer可以有兩種用途:一是對view相關屬性的設置,包括圓角、陰影、邊框等參數,更詳細的參數請點擊這裏;二是實現對view的動畫操控。因此對一個view進行動畫,本質上是對該view的.layer進行動畫操縱。

2、核心動畫(Core Animation)

Core Animation官方文檔定義:

這裏寫圖片描述

翻譯:

Core Animation是iOS和OS X平臺上負責圖形渲染與動畫的基礎框架。Core Animation可以作用於動畫視圖或者其他可視元素,爲你完成了動畫所需的大部分繪幀工作。你只需要配置少量的動畫參數(如開始點的位置和結束點的位置)即可使用Core Animation的動畫效果。Core Animation將大部分實際的繪圖任務交給了圖形硬件來處理,圖形硬件會加速圖形渲染的速度。這種自動化的圖形加速技術讓動畫擁有更高的幀率並且顯示效果更加平滑,不會加重CPU的負擔而影響程序的運行速度。

3、Core Animation的層次結構

Core Animation所在的位置如下圖所示:

這裏寫圖片描述
  
  從上圖中可以看到,核心動畫位於UIKit的下一層,相比UIView動畫,它可以實現更復雜的動畫效果。

Core Animation包含的類有:

​CAAnimation
所有動畫對象的父類,是個抽象類,不能直接使用。CAAnimation控制動畫的持續時間和速度,以及removedOnCompletion(用於標識動畫是否該在結束後自動釋放,默認YES,爲了防止內存泄露)。CAAnimation同時實現了一些協議,包括CAAction(允許CAAnimation的子類可以提供圖層行爲),以及CAMediaTiming。

​CAMediaTiming
CALayer和CAAnimation都實現了這個協議,協議中定義了在一段動畫內用來控制逝去時間的屬性的集合。

​CAPropertyAnimation
CAPropertyAnimation通過指定動畫的keyPath作用於一個單一屬性,CAAnimation通常應用於一個指定的CALayer,於是這裏指的也就是一個圖層的keyPath了。 CAPropertyAnimation並不能對layer進行動畫操作,需要其子類實現動畫操作。

​CABasicAnimation
基本動畫,通過設定起始點,終點,時間,動畫會沿着你這設定點進行移動。可以看做特殊的CAKeyFrameAnimation。

​CAKeyframeAnimation
關鍵幀動畫,可定製度比CABasicAnimation高。

CAAnimationGroup
動畫組:支持多個CABasicAnimation或者CAKeyframeAnimation動畫同時執行。

​CATransition
過渡動畫。

除此之外還,iOS9.0之後新增CASpringAnimation類,它實現彈簧效果的動畫,是CABasicAnimation的子類。

Core Animation類的繼承關係圖如下:

這裏寫圖片描述

在Core Animation中,動畫抽象出來一個父類CAAnimation,CAAnimation實現了CAMediaTiming協議, CAPropertyAnimation、CATransition、CAAnimationGroup繼承CAAnimation,CABasicAnimation、CAKeyframeAnimation繼承CAPropertyAnimation。

4、Core Animation優點

  1)性能強大,使用硬件加速,可以同時向多個圖層添加不同的動畫效果
  2)接口易用,只需要少量的代碼就可以實現複雜的動畫效果。
  3)運行在後臺線程中,在動畫過程中可以響應交互事件(UIView動畫默認動畫過程中不響應交互事件)。

關於每個類的具體使用,將在稍後的下篇文章中介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章