√ 在iOS中誉简,你能看得見摸得著的東西基本上都是UIView径密,比如一個按鈕审孽、一個文本標(biāo)簽县袱、一個文本輸入框、一個圖標(biāo)等等佑力,這些都是UIView
√ 其實UIView之所以能顯示在屏幕上式散,完全是因為它內(nèi)部的一個圖層
√ 在創(chuàng)建UIView對象時,UIView內(nèi)部會自動創(chuàng)建一個圖層(即CALayer對象)打颤,通過UIView的layer屬性可以訪問這個層
@ property (nonatomic,readonly,retain) CALayer *layer;
√ 當(dāng)UIView需要顯示到屏幕上時暴拄,會調(diào)用drawRect:方法進(jìn)行繪圖,并且會將所有內(nèi)容繪制在自己的圖層上编饺,繪圖完畢后乖篷,系統(tǒng)會將圖層拷貝到屏幕上,于是就完成了UIView的顯示
換句話說透且,UIView本身不具備顯示的功能撕蔼,是它內(nèi)部的層才有顯示功能
√ 通過CAlayer對象可以調(diào)整 UIView的一些外觀屬性(陰影 圓角 邊框 顏色) ,還可以為圖層添加動畫?
--- >CAlayer 基本屬性
--- > CAlayer注意點
? ? ? ?1. 首先
? ? ? ? ? ? ? CALayer是定義在QuartzCore框架中的
? ? ? ? ? ? ? CGImageRef、CGColorRef兩種數(shù)據(jù)類型是定義在CoreGraphics框架中的
? ? ? ? ? ? ?UIColor秽誊、UIImage是定義在UIKit框架中的
? ?2. ?其次
? ? ? ? ? ? ? QuartzCore框架和CoreGraphics框架是可以跨平臺使用的鲸沮,在iOS和Mac OS X上都能使用
? ? ? ? ? ? ?但是UIKit只能在iOS中使用
? ? ? ? ? ? ? 為了保證可移植性,QuartzCore不能使用UIImage养距、UIColor诉探,只能使用CGImageRef、CGColorRef
--- >CAlayer和 UIView 比較
√ 通過CALayer棍厌,就能做出跟UIImageView一樣的界面效果
? ?其實肾胯,對比CALayer,UIView多了一個事件處理的功能耘纱。也就是說敬肚,CALayer不能處理用戶的觸摸事件,而UIView可以
? ?所以束析,如果顯示出來的東西需要跟用戶進(jìn)行交互的話艳馒,用UIView;如果不需要跟用戶進(jìn)行交互员寇,用UIView或者CALayer都可以
? ?當(dāng)然弄慰,CALayer的性能會高一些,因為它少了事件處理的功能蝶锋,更加輕量級
//注意:核心動畫一切都是假象陆爽,并不會真實的改變圖層的屬性值,如果以后做動畫的時候扳缕,不需要與用戶交互慌闭,通常用核心動畫(轉(zhuǎn)場)别威。
// UIView動畫必須通過修改屬性的真實值,才有動畫效果驴剔。
//核心動畫都是假象省古,不能改變layer的真實屬性的值
//展示的位置和實際的位置不同。實際位置永遠(yuǎn)在最開始位置
--- >position 和 anchorPoint 的作用
--- > 隱式動畫