Core Animation:UIView和CALayer

概念:

  • UIView:UIView就是在屏幕上顯示的一個(gè)矩陣塊,具有層級關(guān)系,支持相互嵌套??梢蕴幚碛|摸事件(iOS通過視圖層級關(guān)系傳遞觸摸事件),可以支持基于Core Graphics繪圖,可以做旋轉(zhuǎn)或者縮放等仿射變化,以及一些類似于滑動或者漸變的簡單動畫。

  • CALayer:CALayer在概念上和UIView相似,同樣也是一些被層級關(guān)系樹管理的矩陣塊,同樣也可以包含一些內(nèi)容(像圖片、文本或者背景色)。它有一些方法和屬性可以用來做動畫和交換。它和UIView最大的不同是,它不處理用戶的交互。

關(guān)系:

每一個(gè)UIView都持有一個(gè)CALayer實(shí)例的圖層屬性。視圖需要創(chuàng)建并管理這個(gè)圖層。以確保當(dāng)子視圖被添加或者移除時(shí),子視圖的圖層也對應(yīng)的從圖層樹中被添加或者移除。而CALayer才是真正用來在屏幕上顯示和處理動畫的。UIView僅僅是對它的一個(gè)封裝,并提供了Core Animation底層方法的高級接口。

iOS不用一個(gè)簡單的層級處理UIView和CALayer的主要原因是為了將職責(zé)分離,這樣有利于代碼的復(fù)用。例如,Mac OS基于鼠標(biāo)、鍵盤和iOS基于多點(diǎn)觸控在實(shí)現(xiàn)上有著本質(zhì)的區(qū)別。但繪圖、布局和動畫,卻是兩個(gè)平臺可以共用的地方。通過分離,就可以讓兩個(gè)平臺共享繪圖、布局和動畫的實(shí)現(xiàn)。

示例:

可以往視圖中添加子視圖,或者往視圖所持有的圖層,添加子圖層。

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10, 40, 300, 300)];
view.backgroundColor = [UIColor greenColor];
[self.view addSubview:view];

CALayer *subLayer = [[CALayer alloc] init];
subLayer.frame = CGRectMake(0, 0, 80, 80);
subLayer.backgroundColor = [UIColor blueColor].CGColor;
[view.layer addSublayer:subLayer];

效果如下圖所示:

往視圖的圖層上增加子圖層.JPEG
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容