UIView是視圖的基類倘感,UIViewController是視圖控制器的基類扒吁,UIResponder是表示一個(gè)可以在屏幕上響應(yīng)觸摸事件的對(duì)象城丧;
UIwindow是UIView的子類就轧,UIWindow的主要作用:一是提供一個(gè)區(qū)域來(lái)顯示UIView概作,二是將事件(event)的分發(fā)給UIView嗜价,一個(gè)應(yīng)用基本上只有一個(gè)UIWindow.
萬(wàn)物歸根艇抠,UIView和CALayer都是的老祖都是NSObjet【米叮可見(jiàn)UIResponder是用來(lái)響應(yīng)事件的家淤,也就是UIView可以響應(yīng)用戶事件。
CALayer和UIView的區(qū)別:
1.1 UIView的繼承結(jié)構(gòu)為: UIResponder : NSObject奴拦。
CALayer的繼承結(jié)構(gòu)為:NSObject媒鼓。可見(jiàn)UIResponder是用來(lái)響應(yīng)事件的错妖,也就是UIView可以響應(yīng)用戶事件绿鸣,CALayer直接從NSObject繼承,因?yàn)槿鄙倭薝IResponder類暂氯,不能響應(yīng)任何用戶事件
1.2所屬框架,UIView是在/System/Library/Frameworks/UIKit.framework中定義的,UIKit主要是用來(lái)構(gòu)建用戶界面潮模,并且是可以響應(yīng)事件的。CALayer是在/System/Library/Frameworks/QuartzCore.framework定義的痴施。而且CALayer作為一個(gè)低級(jí)的擎厢,可以承載繪制內(nèi)容的底層對(duì)象出現(xiàn)在該框架中究流。
1.3 UIView相比CALayer最大區(qū)別是UIView可以響應(yīng)用戶事件,而CALayer不可以动遭。UIView側(cè)重于對(duì)顯示內(nèi)容的管理芬探,CALayer側(cè)重于對(duì)內(nèi)容的繪制。UIView是基于CALayer的高層封裝厘惦。
1.4相似支持1:相似的樹形結(jié)構(gòu)2:顯示內(nèi)容繪制方式3:布局約束
總結(jié)一下就是:UIView是用來(lái)顯示內(nèi)容的偷仿,可以處理用戶事件.CALayer是用來(lái)繪制內(nèi)容的,對(duì)內(nèi)容進(jìn)行動(dòng)畫處理依賴與UIView來(lái)進(jìn)行顯示宵蕉,不能處理用戶事件
為啥有兩套體系并不是兩套體系酝静?UIView和CALayer是相互依賴的關(guān)系。UIView依賴與calayer提供的內(nèi)容羡玛,CALayer依賴uivew提供的容器來(lái)顯示繪制的內(nèi)容别智。歸根到底CALayer是這一切的基礎(chǔ),如果沒(méi)有CALayer稼稿,UIView自身也不會(huì)存在薄榛,UIView是一個(gè)特殊的CALayer實(shí)現(xiàn),添加了響應(yīng)事件的能力让歼。UIView本身蛇数,更像是一個(gè)CALayer的管理器,訪問(wèn)它的跟繪圖和跟坐標(biāo)有關(guān)的屬性是越,例如frame耳舅,bounds等等,實(shí)際上內(nèi)部都是在訪問(wèn)它所包含的CALayer的相關(guān)屬性倚评。
UIView的layer樹形在系統(tǒng)內(nèi)部浦徊,被系統(tǒng)維護(hù)著三份copy(這段理解有點(diǎn)吃不準(zhǔn))。
第一份天梧,邏輯樹盔性,就是代碼里可以操縱的,例如更改layer的屬性等等就在這一份呢岗。
第二份冕香,動(dòng)畫樹,這是一個(gè)中間層后豫,系統(tǒng)正在這一層上更改屬性悉尾,進(jìn)行各種渲染操作。
第三份挫酿,顯示樹构眯,這棵樹的內(nèi)容是當(dāng)前正被顯示在屏幕上的內(nèi)容。
這三棵樹的邏輯結(jié)構(gòu)都是一樣的早龟,區(qū)別只有各自的屬性惫霸。
UIView的主layer以外猫缭,對(duì)它的subLayer,也就是子layer的屬性進(jìn)行更改壹店,系統(tǒng)將自動(dòng)進(jìn)行動(dòng)畫生成猜丹。
CALayer的坐標(biāo)系系統(tǒng)和UIView有點(diǎn)不一樣,它多了一個(gè)叫anchorPoint的屬性硅卢,它使用CGPoint結(jié)構(gòu)居触,但是值域是0~1,也就是按照比例來(lái)設(shè)置老赤。這個(gè)點(diǎn)是各種圖形變換的坐標(biāo)原點(diǎn),同時(shí)會(huì)更改layer的position的位置制市,它的缺省值是{0.5, 0.5}抬旺,也就是在layer的中央。