UIView是視圖的基類,UIViewController是視圖控制器的基類式撼,UIResponder是表示一個可以在屏幕上響應(yīng)觸摸事件的對象哄芜;
UIwindow是UIView的子類,UIWindow的主要作用:一是提供一個區(qū)域來顯示UIView,二是將事件(event)的分發(fā)給UIView稠腊,一個應(yīng)用基本上只有一個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繼承,因為缺少了UIResponder類俱恶,不能響應(yīng)任何用戶事件
1.2所屬框架,UIView是在/System/Library/Frameworks/UIKit.framework中定義的,UIKit主要是用來構(gòu)建用戶界面雹嗦,并且是可以響應(yīng)事件的。CALayer是在/System/Library/Frameworks/QuartzCore.framework定義的合是。而且CALayer作為一個低級的了罪,可以承載繪制內(nèi)容的底層對象出現(xiàn)在該框架中。
1.3 UIView相比CALayer最大區(qū)別是UIView可以響應(yīng)用戶事件聪全,而CALayer不可以泊藕。UIView側(cè)重于對顯示內(nèi)容的管理,CALayer側(cè)重于對內(nèi)容的繪制难礼。UIView是基于CALayer的高層封裝娃圆。
1.4相似支持1:相似的樹形結(jié)構(gòu)2:顯示內(nèi)容繪制方式3:布局約束
總結(jié)一下就是:UIView是用來顯示內(nèi)容的,可以處理用戶事件.CALayer是用來繪制內(nèi)容的蛾茉,對內(nèi)容進行動畫處理依賴與UIView來進行顯示踊餐,不能處理用戶事件
為啥有兩套體系并不是兩套體系?UIView和CALayer是相互依賴的關(guān)系臀稚。UIView依賴與calayer提供的內(nèi)容吝岭,CALayer依賴uivew提供的容器來顯示繪制的內(nèi)容。歸根到底CALayer是這一切的基礎(chǔ)吧寺,如果沒有CALayer窜管,UIView自身也不會存在,UIView是一個特殊的CALayer實現(xiàn)稚机,添加了響應(yīng)事件的能力幕帆。UIView本身,更像是一個CALayer的管理器赖条,訪問它的跟繪圖和跟坐標有關(guān)的屬性失乾,例如frame,bounds等等纬乍,實際上內(nèi)部都是在訪問它所包含的CALayer的相關(guān)屬性碱茁。
UIView的layer樹形在系統(tǒng)內(nèi)部,被系統(tǒng)維護著三份copy(這段理解有點吃不準)仿贬。
第一份纽竣,邏輯樹,就是代碼里可以操縱的,例如更改layer的屬性等等就在這一份蜓氨。
第二份聋袋,動畫樹,這是一個中間層穴吹,系統(tǒng)正在這一層上更改屬性幽勒,進行各種渲染操作。
第三份港令,顯示樹代嗤,這棵樹的內(nèi)容是當前正被顯示在屏幕上的內(nèi)容。
這三棵樹的邏輯結(jié)構(gòu)都是一樣的缠借,區(qū)別只有各自的屬性干毅。
UIView的主layer以外,對它的subLayer泼返,也就是子layer的屬性進行更改硝逢,系統(tǒng)將自動進行動畫生成。
CALayer的坐標系系統(tǒng)和UIView有點不一樣绅喉,它多了一個叫anchorPoint的屬性渠鸽,它使用CGPoint結(jié)構(gòu),但是值域是0~1柴罐,也就是按照比例來設(shè)置。這個點是各種圖形變換的坐標原點凿试,同時會更改layer的position的位置那婉,它的缺省值是{0.5, 0.5}详炬,也就是在layer的中央呛谜。