UIView和CALayer

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顯示陰影......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹬昌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子攀隔,更是在濱河造成了極大的恐慌皂贩,老刑警劉巖栖榨,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異明刷,居然都是意外死亡婴栽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門辈末,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愚争,“玉大人,你說我怎么就攤上這事本冲∽贾” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵檬洞,是天一觀的道長。 經(jīng)常有香客問我沟饥,道長添怔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任贤旷,我火速辦了婚禮广料,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幼驶。我一直安慰自己艾杏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布盅藻。 她就那樣靜靜地躺著购桑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氏淑。 梳的紋絲不亂的頭發(fā)上勃蜘,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天,我揣著相機(jī)與錄音假残,去河邊找鬼缭贡。 笑死,一個胖子當(dāng)著我的面吹牛辉懒,可吹牛的內(nèi)容都是我干的阳惹。 我是一名探鬼主播,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼眶俩,長吁一口氣:“原來是場噩夢啊……” “哼莹汤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起仿便,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤体啰,失蹤者是張志新(化名)和其女友劉穎攒巍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荒勇,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡柒莉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沽翔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兢孝。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖仅偎,靈堂內(nèi)的尸體忽然破棺而出跨蟹,到底是詐尸還是另有隱情,我是刑警寧澤橘沥,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布窗轩,位于F島的核電站,受9級特大地震影響座咆,放射性物質(zhì)發(fā)生泄漏痢艺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一介陶、第九天 我趴在偏房一處隱蔽的房頂上張望堤舒。 院中可真熱鬧,春花似錦哺呜、人聲如沸舌缤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽国撵。三九已至,卻和暖如春驾锰,著一層夾襖步出監(jiān)牢的瞬間卸留,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工椭豫, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留耻瑟,地道東北人。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓赏酥,卻偏偏與公主長得像喳整,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子裸扶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,566評論 2 349

推薦閱讀更多精彩內(nèi)容

  • UIView與CALayer的關(guān)系 在iOS系統(tǒng)中框都,你能看得見摸得著的東西基本上都是UIView,比如一個按鈕呵晨、一...
    kidzss閱讀 1,466評論 0 6
  • 在iOS中隨處都可以看到絢麗的動畫效果魏保,實現(xiàn)這些動畫的過程并不復(fù)雜熬尺,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,471評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果谓罗,實現(xiàn)這些動畫的過程并不復(fù)雜粱哼,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,104評論 5 13
  • CALayer屬于Core Animation部分的內(nèi)容檩咱,比較重要而不太好理解揭措。以下是園子中看到的一篇文章的摘錄:...
    shuaikun閱讀 1,169評論 0 0
  • 1. UIView是iOS系統(tǒng)中界面元素的基礎(chǔ),所有的界面元素都是繼承自它刻蚯。它本身完全是由CoreAnimatio...
    ScaryMonsterLyn閱讀 352評論 0 0