詳解 CALayer 和 UIView 的區(qū)別和聯(lián)系

1.首先UIView可以響應(yīng)事件,Layer不可以.

UIKit使用UIResponder作為響應(yīng)對(duì)象,來響應(yīng)系統(tǒng)傳遞過來的事件并進(jìn)行處理。UIApplication、UIViewController、UIView、和所有從UIView派生出來的UIKit類(包括UIWindow)都直接或間接地繼承自UIResponder類。
在 UIResponder中定義了處理各種事件和事件傳遞的接口, 而 CALayer直接繼承 NSObject,并沒有相應(yīng)的處理事件的接口。
下面列舉一些處理觸摸事件的接口
– touchesBegan:withEvent:

– touchesMoved:withEvent:

– touchesEnded:withEvent:

– touchesCancelled:withEvent:

其實(shí)還有一些運(yùn)動(dòng)和遠(yuǎn)程控制事件等等,這里就不一一列舉了。
下面的兩篇文章詳細(xì)介紹了 iOS 事件的處理和傳遞
參考鏈接:
http://blog.csdn.net/chun799/article/details/8223612

http://yishuiliunian.gitbooks.io/implementate-tableview-to-understand-ios/content/uikit/1-1-2.html

3.UIView主要是對(duì)顯示內(nèi)容的管理而 CALayer 主要側(cè)重顯示內(nèi)容的繪制。

我在 UIView 和 CALayer 分別重寫了父類的方法。
1
2

[UIView drawRect:rect]
//UIView

[CALayer display]
//CALayer

然后我在上面兩個(gè)方法加了斷點(diǎn),可以看到如下的執(zhí)行。


1440656715211434.png

可以看到 UIView 是 CALayer 的CALayerDelegate,我猜測(cè)是在代理方法內(nèi)部[UIView(CALayerDelegate) drawLayer:inContext]調(diào)用 UIView 的 DrawRect方法,從而繪制出了 UIView 的內(nèi)容.

總結(jié)
總接來說就是如下幾點(diǎn):
每個(gè) UIView 內(nèi)部都有一個(gè) CALayer 在背后提供內(nèi)容的繪制和顯示,并且 UIView 的尺寸樣式都由內(nèi)部的 Layer 所提供。兩者都有樹狀層級(jí)結(jié)構(gòu),layer 內(nèi)部有 SubLayers,View 內(nèi)部有 SubViews.但是 Layer 比 View 多了個(gè)AnchorPoint

在 View顯示的時(shí)候,UIView 做為 Layer 的 CALayerDelegate,View 的顯示內(nèi)容由內(nèi)部的 CALayer 的 display

CALayer 是默認(rèn)修改屬性支持隱式動(dòng)畫的,在給 UIView 的 Layer 做動(dòng)畫的時(shí)候,View 作為 Layer 的代理,Layer 通過 actionForLayer:forKey:向 View請(qǐng)求相應(yīng)的 action(動(dòng)畫行為)

layer 內(nèi)部維護(hù)著三分 layer tree,分別是 presentLayer Tree(動(dòng)畫樹),modeLayer Tree(模型樹), Render Tree (渲染樹),在做 iOS動(dòng)畫的時(shí)候,我們修改動(dòng)畫的屬性,在動(dòng)畫的其實(shí)是 Layer 的 presentLayer的屬性值,而最終展示在界面上的其實(shí)是提供 View的modelLayer

兩者最明顯的區(qū)別是 View可以接受并處理事件,而 Layer 不可以

轉(zhuǎn)載:http://www.cocoachina.com/ios/20150828/13244.html

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

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

  • 前言 前面發(fā)了一篇iOS 面試的文章,在說到 UIView 和 CALayer 的區(qū)別和聯(lián)系的時(shí)候,被喵神指出沒有...
    kissGod閱讀 57,517評(píng)論 23 268
  • 1.首先UIView可以響應(yīng)事件,Layer不可以. UIKit使用UIResponder作為響應(yīng)對(duì)象,來響應(yīng)系統(tǒng)...
    iOS小飛羊閱讀 493評(píng)論 0 3
  • 前言 前面發(fā)了一篇iOS 面試的文章,在說到 UIView 和 CALayer 的區(qū)別和聯(lián)系的時(shí)候,被喵神指出沒有...
    Mz楓閱讀 858評(píng)論 0 4
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜,今天將帶大家一窺ios動(dòng)畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,694評(píng)論 6 30
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜,今天將帶大家一窺iOS動(dòng)畫全貌。在這里你可以看...
    F麥子閱讀 5,270評(píng)論 5 13

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