CALayer與UIView的區(qū)別
基礎
自己的理解
- 1、UIView主要是用于視圖在屏幕上的展示,CALayer是對UIView所要展示的渲染不會直接展示到屏幕上;
- 2、UIView可以響應用戶的操作而Layer不可以;
網(wǎng)上的資料
- 1、每個UIView都有一個CALyer實例的圖層屬性,視圖的職責就是創(chuàng)建和管理這些圖層,其實真正顯示的和用來做動畫的是背后關聯(lián)的圖層,UIView僅僅是對他的一個封裝,提供了一些類似于處理用戶交互的具體功能的接口。其實,UIView更像是一個CALayer的管理器,訪問它的有關繪圖跟坐標的屬性,其實底層都是在訪問CALayer的屬性
- 2、每個UIView內(nèi)部都有一個CALayer在背后提供內(nèi)容的繪制和顯示,并且在UIView的尺寸樣式都是由內(nèi)部的Layer所提供的,相同的是兩者都有樹狀層級結構,layer內(nèi)部youSublayers,View內(nèi)部有Subviews,但是,Layer比View多個AnchorPoint。
- 3、Layer內(nèi)部維持著三份layer tree(圖層樹)分別是:presentLayer Tree(動畫樹)、modeLayer Tree(模型樹)、Render Tree(渲染樹),在做 iOS動畫的時候,我們修改動畫的屬性,在動畫的其實是 Layer 的 presentLayer的屬性值,而最終展示在界面上的其實是提供 View的modelLayer
- 4、兩者最明顯的區(qū)別是 View可以接受并處理事件,而 Layer 不可以。
- 5、在View即將顯示的時候,UIView會自動的把圖層的delegate設置為自己,并提供了一個displayLayer:的實現(xiàn)。
- 6、CALyer是默認修改屬性支持隱式動畫