當前位置:編程學習大全網 - 編程語言 - 詳解CALayer 和 UIView的區別和聯系

詳解CALayer 和 UIView的區別和聯系

前言

前面發了壹篇iOS 面試的文章,在說到 UIView 和 CALayer 的區別和聯系的時候,被喵神指出沒有切中要點,所以這裏就 CALayer 和 UIView 這個問題重新整理了下。這裏會先分條解釋,最後會在文章的結尾給出概括性總結。

1.首先UIView可以響應事件,Layer不可以.

UIKit使用UIResponder作為響應對象,來響應系統傳遞過來的事件並進行處理。UIApplication、UIViewController、UIView、和所有從UIView派生出來的UIKit類(包括UIWindow)都直接或間接地繼承自UIResponder類。

在 UIResponder中定義了處理各種事件和事件傳遞的接口, 而 CALayer直接繼承 NSObject,並沒有相應的處理事件的接口。

下面列舉壹些處理觸摸事件的接口

– touchesBegan:withEvent:

– touchesMoved:withEvent:

– touchesEnded:withEvent:

– touchesCancelled:withEvent:

其實還有壹些運動和遠程控制事件等等,這裏就不壹壹列舉了。

下面的兩篇文章詳細介紹了 iOS 事件的處理和傳遞

參考鏈接:

.io/issue-12-4/

總結

總接來說就是如下幾點:

每個 UIView 內部都有壹個 CALayer 在背後提供內容的繪制和顯示,並且 UIView 的尺寸樣式都由內部的 Layer 所提供。兩者都有樹狀層級結構,layer 內部有 SubLayers,View 內部有 SubViews.但是 Layer 比 View 多了個AnchorPoint

在 View顯示的時候,UIView 做為 Layer 的 CALayerDelegate,View 的顯示內容由內部的 CALayer 的 display

CALayer 是默認修改屬性支持隱式動畫的,在給 UIView 的 Layer 做動畫的時候,View 作為 Layer 的代理,Layer 通過 actionForLayer:forKey:向 View請求相應的 action(動畫行為)

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

兩者最明顯的區別是 View可以接受並處理事件,而 Layer 不可以

參考鏈接

/weiwangchao_/article/details/7771538

  • 上一篇:童趣小天地快樂啟蒙
  • 下一篇:淮北數控編程培訓五軸編程
  • copyright 2024編程學習大全網