CALayer與UIView 的區別

2022-09-16 23:48:15 字數 1745 閱讀 5257

的區別" 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的密碼,沒辦...