一.基本概念
什么是Animation(動畫),簡單點說就是在一段時間內(nèi),顯示的內(nèi)容發(fā)生了變化丽柿。
對CALayer來說動畫就是在一段時間內(nèi),其 Animatable Property發(fā)生了變化.
從CALayer(CA = Core Animation)類名來看就可以看出iOS的Layer就是為動畫而生的,便于實現(xiàn)良好的交互體驗.
動畫涉及到兩個東西: 一是Layer(基類CALayer),一是Animation(基于CAAnimation).
Animation作用于Layer掂器,CALayer提供了接口用于給自己添加Animation.
用于顯示的Layer本質(zhì)上講是一個Model,包含了Layer的各種屬性值。
Animation則包含了動畫的時間,變化,以及變化的速度打洼。
二、CALayer
2.1、CALayer:圖層
UIView的職責(zé)在于界面的顯示和界面事件的處理焦人,每一個View的背后都有一個layer(可以 通過view.layer進行訪問),layer是用于界面顯示的CALayer屬于QuartzCore框架
2.2、Layer的渲染架構(gòu)
Layer也和View一樣存在著一個層級樹狀結(jié)構(gòu),稱之為圖層樹(Layer Tree)重父。
直接創(chuàng)建的或者通過UIView獲得的(view.layer)Layer是圖層樹,實際就是模型樹花椭,是我們可以通過改變他的屬性來直接代碼操作模型樹,模型樹的背后還存在兩份圖層樹的拷貝,一個是呈現(xiàn)樹(Presentation Tree),一個是渲染樹(Render Tree). 呈現(xiàn)樹可以通過普通layer的layer.presentationLayer獲得,而模型樹則可以通過layer.modelLayer屬性獲得(詳情文檔).模型樹的屬性在其被修改(修改layer的Animatable Property屬性)的時候就變成了新的值,這個是可以用代碼直接操控的部分;呈現(xiàn)樹的屬性值和動畫運行過程中界面上看到的是一致的. 而渲染樹是私有的,你無法訪問到,渲染樹是對呈現(xiàn)樹的數(shù)據(jù)進行渲染,為了不阻塞主線程,渲染的過程是在單獨的進程或線程中進行的,所以你會發(fā)現(xiàn) Animation的動畫并不會阻塞主線程.