UIView是視圖的基類,UIViewController是視圖控制器的基類椭员,UIResponder是表示一個(gè)可以在屏幕上響應(yīng)觸摸事件的對(duì)象;
UIwindow是UIView的子類笛园,UIWindow的主要作用:一是提供一個(gè)區(qū)域來顯示UIView隘击,二是將事件(event)的分發(fā)給UIView侍芝,一個(gè)應(yīng)用基本上只有一個(gè)UIWindow.
萬物歸根,UIView和CALayer都是的老祖都是NSObjet埋同≈莸可見UIResponder是用來響應(yīng)事件的,也就是UIView可以響應(yīng)用戶事件凶赁。
CALayer和UIView的區(qū)別:
1.1 UIView的繼承結(jié)構(gòu)為: UIResponder : NSObject咧栗。
CALayer的繼承結(jié)構(gòu)為:NSObject∈蓿可見UIResponder是用來響應(yīng)事件的致板,也就是UIView可以響應(yīng)用戶事件,CALayer直接從NSObject繼承浩峡,因?yàn)槿鄙倭薝IResponder類可岂,不能響應(yīng)任何用戶事件
1.2所屬框架,UIView是在/System/Library/Frameworks/UIKit.framework中定義的,UIKit主要是用來構(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是用來顯示內(nèi)容的侈沪,可以處理用戶事件.CALayer是用來繪制內(nèi)容的揭璃,對(duì)內(nèi)容進(jìn)行動(dòng)畫處理依賴與UIView來進(jìn)行顯示,不能處理用戶事件
為啥有兩套體系并不是兩套體系亭罪?UIView和CALayer是相互依賴的關(guān)系瘦馍。UIView依賴與calayer提供的內(nèi)容,CALayer依賴uivew提供的容器來顯示繪制的內(nèi)容应役。歸根到底CALayer是這一切的基礎(chǔ)情组,如果沒有CALayer,UIView自身也不會(huì)存在箩祥,UIView是一個(gè)特殊的CALayer實(shí)現(xiàn)院崇,添加了響應(yīng)事件的能力。UIView本身袍祖,更像是一個(gè)CALayer的管理器底瓣,訪問它的跟繪圖和跟坐標(biāo)有關(guān)的屬性,例如frame盲泛,bounds等等濒持,實(shí)際上內(nèi)部都是在訪問它所包含的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人灼,也就是按照比例來設(shè)置。這個(gè)點(diǎn)是各種圖形變換的坐標(biāo)原點(diǎn)顾翼,同時(shí)會(huì)更改layer的position的位置挡毅,它的缺省值是{0.5, 0.5},也就是在layer的中央暴构。