“在iOS當(dāng)中狸捅,所有的視圖都從一個(gè)叫做UIVIew的基類派生而來壮不,UIView可以處理觸摸事件血淌,可以支持基于Core Graphics繪圖顽馋,可以做仿射變換(例如旋轉(zhuǎn)或者縮放)谓厘,或者簡單的類似于滑”
“CALayer類在概念上和UIView類似,同樣也是一些被層級(jí)關(guān)系樹管理的矩形塊寸谜,同樣也可以包含一些內(nèi)容(像圖片竟稳,文本或者背景色),管理子圖層的位置熊痴。它們有一些方法和屬性用來做動(dòng)畫和變換他爸。和UIView最大的不同是CALayer不處理用戶的交互”
CALayer并不清楚具體的響應(yīng)鏈,即使它提供了一些方法判斷某個(gè)觸點(diǎn)是否在某個(gè)范圍內(nèi).
“每一個(gè)UIview都有一個(gè)CALayer實(shí)例的圖層屬性,也就是所謂的backing layer果善,視圖的職責(zé)就是創(chuàng)建并管理這個(gè)圖層诊笤,以確保當(dāng)子視圖在層級(jí)關(guān)系中添加或者被移除的時(shí)候,他們關(guān)聯(lián)的圖層也同樣對(duì)應(yīng)在層級(jí)關(guān)系樹當(dāng)中有相同的操作巾陕。 ”
“但是為什么iOS要基于UIView和CALayer提供兩個(gè)平行的層級(jí)關(guān)系呢讨跟?為什么不用一個(gè)簡單的層級(jí)來處理所有事情呢?原因在于要做職責(zé)分離鄙煤,這樣也能避免很多重復(fù)代碼晾匠。在iOS和Mac OS兩個(gè)平臺(tái)上,事件和用戶交互有很多地方的不同梯刚,基于多點(diǎn)觸控的用戶界面和基于鼠標(biāo)鍵盤有著本質(zhì)的區(qū)別混聊,這就是為什么iOS有UIKit和UIView,但是Mac OS有AppKit和NSView的原因。他們功能上很相似句喜,但是在實(shí)現(xiàn)上有著顯著的區(qū)別预愤。”
雖然蘋果封裝好了一些動(dòng)畫,方便了我們的使用,但是弊端同樣存在
有一些UIView沒有暴露出來的CALayer的功能:
陰影咳胃,圓角植康,帶顏色的邊框
3D變換
非矩形范圍
透明遮罩
多級(jí)非線性動(dòng)畫
廢話少說,操練起來:
我曹,好大的圖
來不及解釋,layer的contents屬性,快上車
_whiteView.layer.contents=(__bridge id)[UIImage imageNamed:@"callBg"].CGImage;
CALayer *blueLayer = [CALayer new];
blueLayer.frame = CGRectMake(50, 50, 40, 40);
blueLayer.backgroundColor = [UIColor redColor].CGColor;
UIImage *image = [UIImage imageNamed:@"chat_video_play"];
blueLayer.contents = (__bridge id)image.CGImage;
[_whiteView.layer addSublayer:blueLayer];