一、引言
衆所周知,絢麗動畫效果是iOS系統的一大特點,通過UIView層封裝的動畫,基本已經可以滿足我們應用開發的所有需求,但若需要更加自由的控制動畫的展示,我們就需要使用CoreAnimation架構中的一些類與方法。這裡先附上前幾篇與動畫相關的部落格位址,這一系列,我們抽出其中的CoreAnimation架構來詳細解讀。
UIViewAnimation動畫的使用:
http://my.oschina.net/u/2340880/blog/484457UIView動畫執行的另一種方式:
http://my.oschina.net/u/2340880/blog/484538UIView轉場動畫:
http://my.oschina.net/u/2340880/blog/484669CoreAnimation隐式動畫的應用:
http://my.oschina.net/u/2340880/blog/484793粒子效果的使用:
http://my.oschina.net/u/2340880/blog/485095二、初識CoreAnimation
CoreAnimation架構是基于OpenGL與CoreGraphics圖像處理架構的一個跨平台的動畫架構。簡單來說,它使幫助我們将圖像讀取成位圖,通過硬體的處理,實作動畫效果。文檔中的一張圖檔十分形象的描述了CoreAnimation與UIKit架構的關系:

在CoreAnimation中,大部分的動畫效果都是通過Layer層來實作的,通過CALayer,我們可以組織複雜的層級結構。
在CoreAnimation中,大多數的動畫效果是添加在圖層屬性的變化上,例如,改變圖層的位置,大小,顔色,圓角半徑等。Layer層并不決定視圖的展現,它隻是存儲了視圖的幾何屬性狀态。
三、錨點對幾何屬性的影響
關于Layer層,我們需要了解一個有關錨點的概念,錨點決定了圖層的繪制位置以及動畫展示時其參照的點,錨點的取值範圍為0-1,錨點有兩個地方在應用中會有很大影響:
1.layer層的position參照點始終和錨點重合
通過position決定了layer所在的位置,在Layer中,雖然也有frame這樣的屬性,但我們很少使用,一般我們會使用bounds和position确定Layer層的大小和位置。
2.錨點決定進行動作的參照點
例如一個旋轉動作,錨點決定了層旋轉的中心點,對于放大縮小的動作,錨點決定了放大或者縮小參照的中心點。
可以來看下邊一組圖:
上面兩個矩形,frame和bounds都是一樣的,第一個矩形的錨點位置為(0.5,0.5),第二個為(0,0),
是以,兩個矩形的position點是不同的,第一個是(100,100),第二個是(40,60)。再看當産生動作時錨點的影響:
現在就很好了解了,錨點的不同直接影響了動作産生的參照點。
通過CALayer的如下屬性,我們可以設定錨點,注意x,y的取值範圍都是0~1,代表所占寬度和高度的比例:
@property CGPoint anchorPoint;
四、Layer與View之間的關系
Layer是專門用于輔助我們繪制圖像的層,它使支援三維坐标系的繪制的,通過每個坐标點與轉換矩陣的運算,來決定最後繪制的狀态,并且,Layer可以更高幀率的繪制動畫效果。然而Layer與View依然有很大不同,首先,我們不可能隻通過Layer來開發應用程式,Layer并沒有接收事件和處理使用者互動的能力,這些依然需要View來完成,每一個View中,都有一個Layer的屬性來輔助進行圖形的繪制。并且Layer是可以層級嵌套的,開發中,我們可以根據需求靈活選擇。