1.UIView是iOS系統(tǒng)中界面元素的基礎(chǔ)示姿,所有的界面元素都繼承自它。它本身完全是由CoreAnimation來實現(xiàn)的(Mac下似乎不是這樣)。它真正的繪圖部分,是由一個叫CALayer(Core Animation Layer)的類來管理扼雏。UIView本身坚嗜,更像是一個CALayer的管理器,訪問它的跟繪圖和跟坐標(biāo)有關(guān)的屬性呢蛤,例如frame惶傻,bounds等等棍郎,實際上內(nèi)部都是在訪問它所包含的CALayer的相關(guān)屬性其障。
2.UIView有個layer屬性,可以返回它的主CALayer實例涂佃,UIView有一個layerClass方法励翼,返回主layer所使用的類,UIView的子類辜荠,可以通過重載這個方法汽抚,來讓UIView使用不同的CALayer來顯示,例如通過
+ (class) layerClass
{
return ([CAEAGLLayer class]);
}
使某個UIView的子類使用GL來進(jìn)行繪制伯病。
3.UIView的CALayer類似UIView的子View樹形結(jié)構(gòu)造烁,也可以向它的layer上添加子layer,來完成某些特殊的表示午笛。例如下面的代碼
grayCover = [[CALayer alloc] init];
grayCover.backgroundColor = [[[UIColor blackColor] colorWithAlphaComponent:0.2] CGColor];
[self.layer addSubLayer: grayCover];
會在目標(biāo)View上敷上一層黑色的透明薄膜惭蟋。
4.UIView的layer樹形在系統(tǒng)內(nèi)部,被系統(tǒng)維護(hù)著三份copy(這段理解有點吃不準(zhǔn))药磺。
第一份,邏輯樹,就是代碼里可以操縱的恐似,例如更改layer的屬性等等就在這一份秃励。
第二份,動畫樹围辙,這是一個中間層我碟,系統(tǒng)正在這一層上更改屬性,進(jìn)行各種渲染操作姚建。
第三份矫俺,顯示樹,這棵樹的內(nèi)容是當(dāng)前正被顯示在屏幕上的內(nèi)容桥胞。這三棵樹的邏輯結(jié)構(gòu)都是一樣的恳守,區(qū)別只有各自的屬性。
5.動畫的運作UIView的主layer以外(我覺得是這樣)贩虾,對它的subLayer催烘,也就是子layer的屬性進(jìn)行更改,系統(tǒng)將自動進(jìn)行動畫生成缎罢,動畫持續(xù)時間有個缺省時間伊群,個人感覺大概是0.5秒考杉。在動畫時間里,系統(tǒng)自動判定哪些屬性更改了舰始,自動對更改的屬性進(jìn)行動畫插值崇棠,生成中間幀然后連續(xù)顯示產(chǎn)生動畫效果。
6.坐標(biāo)系系統(tǒng)(對position和anchorPoint的關(guān)系還是犯暈)CALayer的坐標(biāo)系系統(tǒng)和UIView有點不一樣丸卷,它多了一個叫anchorPoint的屬性枕稀,它使用CGPoint結(jié)構(gòu),但是值域是0~1谜嫉,也就是按照比例來設(shè)置萎坷。這個點是各種圖形變換的坐標(biāo)原點,同時會更改layer的position的位置沐兰,它的缺省值是{0.5, 0.5}哆档,也就是在layer的中央。
某layer.anchorPoint = CGPointMake(0.f, 0.f);
如果這么設(shè)置住闯,layer的左上角就會被挪到原來的中間的位置瓜浸,加上這樣一句就好了
某layer.position = CGPointMake(0.f, 0.f);
7.真實例子的分析
這是iphone上iBook翻頁的效果,假設(shè)每一頁都是一個UIView比原,我覺得一個頁面是貼了倆個Layer插佛,文字Layer顯示正面的內(nèi)容,背面layer用文字layer的快照做affine翻轉(zhuǎn)春寿,貼在文字layer的后面朗涩。因為Layer可以設(shè)置顯示陰影,也許后面的陰影效果沒有使用單獨的一個layer來顯示绑改。至于這個曲面效果谢床,我查了很多資料也沒有結(jié)果,估計是使用了GL的曲面繪圖厘线?
8.最后一個讓人惡心的识腿。layer可以設(shè)置圓角顯示,例如UIButton的效果造壮,也可以設(shè)置陰影顯示渡讼,但是如果layer樹中的某個layer設(shè)置了圓角,樹中所有l(wèi)ayer的陰影效果都將顯示不了了耳璧。如果既想有圓角又想要陰影成箫,好像只能做兩個重疊的UIView,一個的layer顯示圓角旨枯,一個的layer顯示陰影......