的區別" href="" target="_blank" rel="noopener">calayer與uiview 的區別
2407279660
舉報trackback:
1.uiview是ios系統中介面元素的基礎,所有的介面元素都繼承自它。它本身完全是由coreanimation來實現的(mac下似乎不是 這樣)。它真正的繪圖部分,是由乙個叫calayer(core animation layer)的類來管理。uiview本身,更像是乙個calayer的管理器,訪問它的跟繪圖和跟座標有關的屬性,例如frame,bounds等等, 實際上內部都是在訪問它所包含的calayer的相關屬性。
2.uiview有個layer屬性,可以返回它的主calayer例項,uiview有乙個layerclass方法,返回主layer所使用的類,uiview的子類,可以通過過載這個方法,來讓uiview使用不同的calayer來顯示,例如通過
[plain]view plain
copy
- (class) layerclass
使某個uiview的子類使用gl來進行繪製。
3.uiview的calayer類似uiview的子view樹形結構,也可以向它的layer上新增子layer,來完成某些特殊的表示。例如下面的**
[plain]view plain
copy
graycover = [[calayer alloc] init];
graycover.backgroundcolor = [[[uicolor blackcolor] colorwithalphacomponent:0.2] cgcolor];
[self.layer addsublayer: graycover];
會在目標view上敷上一層黑色的透明薄膜。
4.uiview的layer樹形在系統內部,被系統維護著三份copy(這段理解有點吃不準)。
第乙份,邏輯樹,就是**裡可以操縱的,例如更改layer的屬性等等就在這乙份。
第二份,動畫樹,這是乙個中間層,系統正在這一層上更改屬性,進行各種渲染操作。
第三份,顯示樹,這棵樹的內容是當前正被顯示在螢幕上的內容。
這三棵樹的邏輯結構都是一樣的,區別只有各自的屬性。
5.動畫的運作
uiview的主layer以外(我覺得是這樣),對它的sublayer,也就是子layer的屬性進行更改,系統將自動進行動畫生成,動畫持續 時間有個預設時間,個人感覺大概是0.5秒。在動畫時間裡,系統自動判定哪些屬性更改了,自動對更改的屬性進行動畫插值,生成中間幀然後連續顯示產生動畫 效果。
6.座標系系統(對position和anchorpoint的關係還是犯暈)
ps:calayer採用的opengl的座標系統。所以存在poistion和anchorpoint的雙重屬性。
calayer的座標系系統和uiview有點不一樣,它多了乙個叫anchorpoint的屬性,它使用cgpoint結構,但是值域是0~1, 也就是按照比例來設定。這個點是各種圖形變換的座標原點,同時會更改layer的position的位置,它的預設值是,也就是在layer的**。
某layer.anchorpoint = cgpointmake(0.f, 0.f);
如果這麼設定,layer的左上角就會被挪到原來的中間的位置,
加上這樣一句就好了
某layer.position = cgpointmake(0.f, 0.f);
7.真實例子的分析
UIView與CALayer的理解
1 初始化乙個calayer calayer是含隱式動畫的 layer calayer alloc init 設定calayer的顏色 layer.backgroundcolor uicolor orangecolor cgcolor layer.frame cgrectmake 0,0,100,1...
UIView與CALayer的選擇
layer.contents id uiimage iamgewithnamed cgimage 如何選擇 關於calayer的疑惑 calayer是定義在quartzcore框架中的 cgimageref cgcolorref兩種資料型別是定義在coregraphics框架中的 uicolor u...
UIView與CALayer的區別
研 究core animation已經有段時間了,關於core animation,網上沒什麼好的介紹。蘋果 上有篇專門的總結性介紹,但是似乎原理性的東西不多,看得人雲山霧罩,感覺,寫那篇東西的人,其實是假 設讀的人了解介面動畫技術的原理的。今天有點別的事情要使用linux,忘掉了ssh的密碼,沒辦...