CALayer與UIView的區(qū)別

jlsdflfsfjf

總接來說就是如下幾點:

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

問:為什么iOS要基于UIView和CALayer提供兩個平行的層級結(jié)構(gòu)呢?

  • 答:原因就是做到職責(zé)分離,避免很多重復(fù)代碼。在iOS和MacOS兩個平臺上,事件與用戶交互有很多的不同,基于多點觸控的用戶界面和鼠標(biāo)鍵盤有著本質(zhì)的區(qū)別,這就是iOS有UIKit和UIView,而Mac OS有AppKit和NSView的原因。創(chuàng)建兩個層次結(jié)構(gòu)就能夠在iOS與Mac OS 之間共享代碼,從而使得開發(fā)更加便捷。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,697評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,271評論 5 13
  • CALayer與UIView的區(qū)別 基礎(chǔ) CALayer的定義 CALayer的基礎(chǔ) CALayer和UIView...
    青春flame閱讀 550評論 0 0
  • Core Animation其實是一個令人誤解的命名。你可能認(rèn)為它只是用來做動畫的,但實際上它是從一個叫做Laye...
    小貓仔閱讀 3,968評論 1 4
  • 前言 前面發(fā)了一篇iOS 面試的文章,在說到 UIView 和 CALayer 的區(qū)別和聯(lián)系的時候,被喵神指出沒有...
    Mz楓閱讀 858評論 0 4

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