CALayer和UIView詳解

關(guān)于UI的繼承關(guān)系圖:

24794-e7fac72d0288644a.png

CALayer & UIView 區(qū)別

1. UIView是UIKit的(只能iOS使用),CALayer是QuartzCore的(iOS和mac os通用)
2. UIView繼承UIResponder,CALayer繼承NSObject,UIView比CALayer多了一個(gè)事件處理的功能,也就是說(shuō),CALayer不能處理用戶的觸摸事件,而UIView可以
3. UIView來(lái)自CALayer,是CALayer的高層實(shí)現(xiàn)和封裝,UIView的所有特性來(lái)源于CALayer支持
4. CABasicAnimation,CAAnimation,CAKeyframeAnimation等動(dòng)畫(huà)類(lèi)都需要加到CALayer上

概念

1. CALayer是定義在QuartzCore框架中的(Core Animation)
2. CGImageRef、CGColorRef兩種數(shù)據(jù)類(lèi)型是定義在CoreGraphics框架中的
3. UIColor、UIImage是定義在UIKit框架中的
4. QuartzCore框架和CoreGraphics框架是可以跨平臺(tái)使用的,在iOS和Mac OS X上都能使用, 但是UIKit只能在iOS中使用, 所以為了保證可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef

CALayer和UIView的關(guān)系

UIView顯示在屏幕上歸功于CALayer
  • 可以說(shuō):UIView依賴(lài)CALayer,又高于CALayer

  • 通過(guò)調(diào)用drawRect方法來(lái)渲染自身的內(nèi)容,調(diào)節(jié)CALayer屬性可以調(diào)整UIView的外觀,UIView繼承自UIResponder,比起CALayer可以響應(yīng)用戶事件,Xcode6之后可以方便的通過(guò)視圖調(diào)試功能查看圖層之間的關(guān)系

UIView更像是一個(gè)CALayer的管理器
  • UIView是iOS系統(tǒng)中界面元素的基礎(chǔ),所有的界面元素都繼承自它。

  • 它內(nèi)部是由Core Animation來(lái)實(shí)現(xiàn)的,它真正的繪圖部分,是由一個(gè)叫CALayer(Core Animation Layer)的類(lèi)來(lái)管理。UIView本身,更像是一個(gè)CALayer的管理器,訪問(wèn)它的跟繪圖和坐標(biāo)有關(guān)的屬性,如frame,bounds等,實(shí)際上內(nèi)部都是訪問(wèn)它所在CALayer的相關(guān)屬性

(筆或面試)UIWindow和UIView和CALayer的聯(lián)系和區(qū)別

1.UIWindow:
  • 其實(shí)先說(shuō)一下UIWindow,它在整個(gè)app當(dāng)中只有一個(gè)UIWindow;

  • 主要作用就是:提供一個(gè)區(qū)域用來(lái)顯示UIView;將事件分發(fā)給UIView;與UIViewController一起處理屏幕的旋轉(zhuǎn)事件。

2.接下來(lái),當(dāng)然就是常用到的UIView和CALayer;
  • UIView的繼承結(jié)構(gòu)為:UIResponder:NSObject

  • 所屬的框架是:/System/Library/Frameworks/UIKit.framework。UIKit主要是用來(lái)構(gòu)建用戶界面的,并且可以響應(yīng)事件。

  • 當(dāng)然對(duì)于UIView,側(cè)重于對(duì)內(nèi)容的顯示管理;其實(shí)是相對(duì)于CALayer的高層封裝。

3.CALayer
  • 其實(shí)就是一個(gè)圖層,UIView之所以能顯示在屏幕上,主要是它內(nèi)部有- 一個(gè)CALayer對(duì)象。在創(chuàng)建UIView時(shí),它內(nèi)部會(huì)自動(dòng)創(chuàng)建一個(gè)圖層,當(dāng)UIView需要顯示在屏幕上的時(shí)候,會(huì)調(diào)用drawRect:方法進(jìn)行繪圖,并且會(huì)將所有內(nèi)容繪制到自己的圖層上,繪圖完畢后,系統(tǒng)會(huì)將圖層拷貝到屏幕上,這樣完成UIView的顯示。

  • CALayer的繼承結(jié)構(gòu):NSObject 也就是直接繼承NSObject,而不能夠響應(yīng)事件。

所屬的框架:/System/Library/Frameworks/QuartzCore.framework;


-------總結(jié)一下:(可能不太恰當(dāng),自己面試或者傳授的時(shí)候,進(jìn)行整理可以)------

UIWindow、UIView、CALayer三者的關(guān)系
  • UIWindow:是UIView的子類(lèi),主要作用就是:提供一個(gè)區(qū)域來(lái)顯示UIView;事件的分發(fā)

  • UIView:用來(lái)顯示內(nèi)容,可以進(jìn)行用戶事件的處理;

  • CALayer:用來(lái)繪制內(nèi)容的,對(duì)內(nèi)容進(jìn)行動(dòng)畫(huà)處理,在UIView上進(jìn)行顯示,不能處理響應(yīng)事件。

UIView和CALayer是相互依賴(lài)的關(guān)系。其實(shí)一切都可以從CALayer說(shuō)起。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺ios動(dòng)畫(huà)全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,690評(píng)論 6 30
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺iOS動(dòng)畫(huà)全貌。在這里你可以看...
    F麥子閱讀 5,268評(píng)論 5 13
  • 概覽 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺iOS動(dòng)畫(huà)全貌。在這里你...
    被吹落的風(fēng)閱讀 1,704評(píng)論 1 2
  • 地鐵出行對(duì)于大城市生活的人來(lái)說(shuō)是既舒適又快捷的出行優(yōu)選之一,不過(guò),錯(cuò)綜復(fù)雜的地鐵線路對(duì)很多路盲和城市新人來(lái)說(shuō)卻是一...
    APPamateur閱讀 3,595評(píng)論 10 24
  • 伸手去摸摸孩子的額頭,微微有點(diǎn)汗,又調(diào)低空調(diào)的溫度??粗磉叞察o入睡的人兒,我狠狠的抿了一下嘴唇,還是控制...
    mingdeng閱讀 358評(píng)論 2 1

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