UIView 顯示在屏幕上歸功于CALayer,通過調(diào)用drawRect方法來渲染自身的內(nèi)容,調(diào)節(jié)CALayer的屬性可以調(diào)整UIView的外觀,UIView繼承自UIResponder,比起CALayer可以響應(yīng)用戶事件,Xcode6之后可以方便的通過視圖調(diào)試功能查看圖層之間的關(guān)系。
UIView 是 iOS 系統(tǒng)中界面元素的基礎(chǔ),所有的界面元素都繼承自它。它內(nèi)部是由Core Animation來實現(xiàn)的,它真正的繪圖部分,是由一個叫 CALayer(Core AnimationLayer)的類來管理。UIView本身,更像是一個CALayer的管理器,訪問它的跟繪圖和坐標(biāo)有關(guān)的屬性,如frame,bounds等,實際上內(nèi)部都是訪問它所在CALayer的相關(guān)屬性。
UIView有個layer屬性,可以返回它的主CALayer實例,UIView有一個layerClass方法,返回主layer所使 的類,UIView的子類,可以通過重載這個方法,來讓UIView 使用不同的CALayer來顯示,如:
- (Class)layerClass {
????//使某個UIView的子類使GL來進(jìn)行繪制
????return ([CAEAGLLayer class]);
}
UIView的CALayer類似UIView的子View樹形結(jié)構(gòu),也可以向它的layer上添加子layer,來完成某些特殊的顯示。 如下面的代碼會在目標(biāo)View上敷上一層黑色的透明薄膜。
CALayer * grayCover = [[CALayer alloc] init];
grayCover.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.2].CGColor;
[self.view.layer addSublayer:grayCover];
補(bǔ)充部分:UIView的layer樹形在系統(tǒng)內(nèi)部被系統(tǒng)維護(hù)著三份copy。
1.邏輯樹,就是代碼里可以操縱的,例如更改layer的屬性等等就在這一份。
2.動畫樹,這是一個中間層,系統(tǒng)在這一層上更改屬性,進(jìn)行各種渲染操作。
3.顯示樹,這棵樹的內(nèi)容是當(dāng)前正被顯示在屏幕上的內(nèi)容。這三棵樹的邏輯結(jié)構(gòu)都是樣的,區(qū)別只有各自的屬性。