Core Animation編程指南
Core Animation是一個Objc類庫,用于處理圖像渲染,投射和動畫。
它提供以下功能:
通過簡單的編程模型提供高性能的合成效果。
基于熟悉的視圖抽象,可以使用樹狀的對象體系創(chuàng)建復(fù)雜的用戶界面
輕量的數(shù)據(jù)結(jié)構(gòu)??梢酝瑫r對上百個層進(jìn)行展示和動畫。
抽象的動畫接口,能夠讓動畫運(yùn)行在獨(dú)立的線程。一旦動畫配制完畢并啟動后,Core Animation將負(fù)責(zé)它的運(yùn)行和楨速。
提升應(yīng)用程序性能。程序只需要在變化時重畫。將應(yīng)用程序在resize時需要做的處理降到最低并提供layout服務(wù)層,Core Animation讓你不再需要手動處理楨速。
靈活的layout管理器模型,自帶的管理器能讓你指定層和其兄弟層的相對位置和大小。
使用 Core Animation,開發(fā)者不再需要底層圖形接口就可以創(chuàng)建高性能的動態(tài)用戶界面了。
Core Animation類體系

Core Animation類圖Core Animation的類可分為以下幾組:
提供展示的內(nèi)容的Layer類
Animation 和 timing 類
Layout 和 constraint 類
將多個修改合成一個原子更新操作的事務(wù)類
基本的 Core Animatin 類包含在 Quartz Core 框架中,也有另外的layer類在其他框架中定義。下圖展示了 Core Animation 的類體系。
CALayer
CALayer 是Core Animation的基礎(chǔ),它的作用類似于 NSView 。每一個 CALayer 可以擁有一個父層和多個子層,由此形成一個樹狀結(jié)構(gòu)的體系,叫做 layer tree。
層從后往前的順序進(jìn)行渲染,子層基于和父層相對的局部坐標(biāo)系統(tǒng)。還可以對層進(jìn)行矩陣轉(zhuǎn)換以實(shí)現(xiàn)復(fù)雜的展示效果.
在 CALayer 中,除了繼承還有多種方式可以為它提供顯示的內(nèi)容,這一點(diǎn)有別于其他視圖類:
把層的 content 屬性設(shè)置為Core Graphics image,或者代理
提供代理對Core Graphics image context進(jìn)行畫圖
設(shè)置層公用的一些可視化屬性,比如背景色,透明度等
Subclassing CALayer and implementing any of the above techniques in a more encapsulated manner.
動畫和時間函數(shù)
層的很多可視屬性都可以產(chǎn)生隱式動畫,這些屬性稱為可動畫屬性,修改層的可動畫屬性自動就會產(chǎn)生從當(dāng)前值變化到目標(biāo)值的動畫,比如設(shè)置層的hidden屬性為YES,就會產(chǎn)生一個淡出的動畫。大部分可動畫屬性都有默認(rèn)的動畫,這些動畫也是可以定制的。
可動畫屬性也可以進(jìn)行顯式動畫,要創(chuàng)建顯式動畫你可以創(chuàng)建Core Animation動畫類的實(shí)例并指定視覺效果,顯式動畫不會修改層對象的屬性值,它僅僅是展示動畫效果而已。
Core Animation既提供基本動畫也提供關(guān)鍵楨動畫,你可以對層的整個內(nèi)容進(jìn)行動畫也可以對部分屬性進(jìn)行動畫。所有動畫類都繼承自抽象類 CAAnimation 。 CAAnimation 遵守 CAMediaTiming 協(xié)議,可以對動畫進(jìn)行簡單的時長,速度,重復(fù)次數(shù)控制。它還遵守 CAAction 協(xié)議,可以讓動畫在層觸發(fā)action時啟動.
動畫類還定義了描述動畫速度的基于簡單bezier曲線的時間函數(shù)。比如ease-out時間函數(shù)會讓動畫在快結(jié)束的時候減速。
Core Animation提供了許多或具體或抽象的動畫類:
CATransition 提供作用于整個層的轉(zhuǎn)換效果。你還可以通過自定義的Core Image filter擴(kuò)展轉(zhuǎn)換效果。
CAAnimationGroup 可以打包多個動畫對象并讓他們同時執(zhí)行。
CAPropertyAnimation 支持基于屬性關(guān)鍵路徑的動畫。
CABasicAnimation 對屬性做簡單的插值
CAKeyframeAnimation 對關(guān)鍵楨動畫提供支持。指定需要動畫屬性的關(guān)鍵路徑,一個表示每一個階段對應(yīng)的值的數(shù)組,還有一個關(guān)鍵楨時間和時間函數(shù)的數(shù)組。動畫運(yùn)行時,依次設(shè)置每一個值的指定插值。
Layout管理類
Mac OS X 的 Core Animation 還提供更靈活的機(jī)制可以讓你自己編寫自定義的 layout 管理器。
Core Animation 的 CAConstraint 類是個layout管理器,它根據(jù)你指定的約束條件對子層進(jìn)行排列。每一個約束條件(封裝在 CAConstraint 類的實(shí)例中)描述層和兄弟層或父層之間的幾何屬性的關(guān)系。
事務(wù)管理類
對可動畫屬性的任何修改都應(yīng)該在事務(wù)中完成。 CATransition 類負(fù)責(zé)將多個動畫操作打包成原子更新操作然后執(zhí)行。支持嵌套事務(wù)。
Core Animation 支持兩種事務(wù):隱式和顯式。在當(dāng)前沒有事務(wù)的情況下對可動畫屬性進(jìn)行修改會自動創(chuàng)建一個隱式的事務(wù),在當(dāng)前線程下一次迭代時自動提交。要創(chuàng)建顯式事務(wù),在對層進(jìn)行修改之前給 CATransition 類發(fā)一個 begin 消息,修改后再發(fā)一個 commit 消息。