? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????? ? iOS CALayer詳解
一豁护、概述
在ios中,能看得見摸得到的東西基本都是UIView,比如一個按鈕、一個文本標簽萝勤、一個文本輸入框、一個圖標等等呐伞,這些都是UIView敌卓。其實UIView之所以能顯示在屏幕上,完全是因為其內部的一個圖層,在創(chuàng)建UIView對象時,UIView內部會自動創(chuàng)建一個圖層對象(即CALayer對象)。
當UIView需要顯示在屏幕上時,會調用drawRect方法進行繪圖,并且會將所有內容繪制在自己的圖層上伶氢。繪圖完畢后,系統會將圖層拷貝到屏幕上,于是就完成了UIView的顯示趟径。換言之,UIView本身不具備顯示的功能,是其內部的圖層具有顯示功能。
通過操作CALayer對象,可以很方便的調整UIView的一些外觀屬性癣防。比如陰影蜗巧、圓角大小、邊框的寬度和顏色蕾盯、還能給圖層添加動畫來實現一些比較炫酷的效果惧蛹。
二、UIView與CALayer之間的區(qū)別
1、UIView相當于一個容器裝載著CALayer,可以處理用戶事件香嗓。直接繼承UIResponser迅腔。
2、CALayer是用來繪制內容的,不能處理用戶事件靠娱。直接繼承NSObject沧烈。
3、UIView與CALayer是相互依賴的關系像云。UIView依賴于CALayer提供的內容,CALayer依賴于UIView所提供的容器以用來顯示CALayer繪制的內容锌雀。
三、CALayer的常用屬性
可以通過contents屬性給UIView設置背景圖片:
例如,我們利用CALayer對圖片的顯示進行處理:
運行效果如下:
看上面的代碼,我們明明添加了陰影,為什么沒有出來呢?那是因為陰影效果和圓角裁剪發(fā)生了沖突,如果設置了圓角裁剪,那么陰影效果將不會出現迅诬。當注釋掉圓角裁剪時,陰影效果才會展示,如下所示:
四腋逆、position和anchorPoint屬性
CALayer有兩個重要的屬性:position和anchorPoint。
position屬性:
(1)用來設置CALayer在父層中的位置.
(2)以父層的左上角為原點(0,0).
anchorPoint屬性:
(1)稱為"定位點"侈贷、"錨點"惩歉、控件旋轉動畫圍繞著該點旋轉.
(2)以自己的左上角為原點(0,0).
(3)它的x,y取值都是(0~1),默認值是(0.5,0.5),即默認是中點.
(4)決定著CALayer上的哪個點會在position的位置(即設置的錨點會移動到position點的位置)
五俏蛮、隱式動畫
每一個UIView內部都默認關聯著一個CALayer,我們稱這個Layer為RootLayer(根層),所有的非RootLayer對象,都存在隱式動畫(即系統自帶的一些效果)撑蚌。
當對非RootLayer的部分屬性進行修改時,默認會產生一些動畫效果,而這部分屬性稱為AnimatableProperties(可動畫屬性).
列舉幾個常見的AnimatableProperties:
bounds:用于設置CALayer的寬度和高度,修改該屬性會產生縮放動畫。
backgroundColor:用于設置CALayer的背景顏色,修改該屬性會產生背景色的漸變動畫搏屑。
position:用于設置CALayer的位置,修改該屬性會產生平移動畫争涌。
可以通過動畫事務(CATransation)關閉默認的隱式動畫: