view和layer的區別

view和layer最主要的區別是view可以處理事件,layer不可以

view處理事物,layer渲染界面

每一個view都有一個layer屬性,該屬性的類型是CALayer,它是管理着view界面的繪製,而這個view是layer的delegate。

view依賴於layer來繪製界面,當然很多的屬性view都是直接返回layer的,比如frame是直接返回的layer的frame,而layer的frame是由它的anchorPoint,position,bounds,和 transform共同決定的

總接來說就是如下幾點:

  • 每個 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 不可以

layer有很多種,比如 CAShapeLayer、CAScrollLayer、AVCaptureVideoPreviewLayer ... 這些都繼承自CALayer,CALayer繼承NSObject

參考文章:view和layer區別


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章