CALayer與UIView的區(qū)別
基礎(chǔ)
自己的理解
- 1、UIView主要是用于視圖在屏幕上的展示,CALayer是對UIView所要展示的渲染不會直接展示到屏幕上;
- 2、UIView可以響應(yīng)用戶的操作而Layer不可以冤议;
網(wǎng)上的資料
- 1奉狈、每個UIView都有一個CALyer實例的圖層屬性芝加,視圖的職責就是創(chuàng)建和管理這些圖層央渣,其實真正顯示的和用來做動畫的是背后關(guān)聯(lián)的圖層,UIView僅僅是對他的一個封裝渴频,提供了一些類似于處理用戶交互的具體功能的接口芽丹。其實,UIView更像是一個CALayer的管理器卜朗,訪問它的有關(guān)繪圖跟坐標的屬性拔第,其實底層都是在訪問CALayer的屬性
- 2、每個UIView內(nèi)部都有一個CALayer在背后提供內(nèi)容的繪制和顯示场钉,并且在UIView的尺寸樣式都是由內(nèi)部的Layer所提供的蚊俺,相同的是兩者都有樹狀層級結(jié)構(gòu),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設(shè)置為自己悯恍,并提供了一個displayLayer:的實現(xiàn)库糠。
- 6、CALyer是默認修改屬性支持隱式動畫