衆所周知,絢麗動畫效果是iOS系統的一大特色,經過UIView層封裝的動畫,基本已經能夠知足咱們應用開發的全部需求,但若須要更加自由的控制動畫的展現,咱們就須要使用CoreAnimation框架中的一些類與方法。這裏先附上前幾篇與動畫相關的博客地址,這一系列,咱們抽出其中的CoreAnimation框架來詳細解讀。編程
UIViewAnimation動畫的使用:http://my.oschina.net/u/2340880/blog/484457 框架
UIView動畫執行的另外一種方式:http://my.oschina.net/u/2340880/blog/484538動畫
UIView轉場動畫:http://my.oschina.net/u/2340880/blog/484669spa
CoreAnimation隱式動畫的應用:http://my.oschina.net/u/2340880/blog/484793.net
粒子效果的使用:http://my.oschina.net/u/2340880/blog/485095code
CoreAnimation框架是基於OpenGL與CoreGraphics圖像處理框架的一個跨平臺的動畫框架。簡單來講,它使幫助咱們將圖像讀取成位圖,經過硬件的處理,實現動畫效果。文檔中的一張圖片十分形象的描述了CoreAnimation與UIKit框架的關係:blog
在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是專門用於輔助咱們繪製圖像的層,它使支持三維座標系的繪製的,經過每一個座標點與轉換矩陣的運算,來決定最後繪製的狀態,而且,Layer能夠更高幀率的繪製動畫效果。然而Layer與View依然有很大不一樣,首先,咱們不可能只經過Layer來開發應用程序,Layer並無接收事件和處理用戶交互的能力,這些依然須要View來完成,每個View中,都有一個Layer的屬性來輔助進行圖形的繪製。而且Layer是能夠層級嵌套的,開發中,咱們能夠根據需求靈活選擇。