在ios開發(fā)工作UIview對于我們開發(fā)者最常見也是常用到的,CALayer如果不是做炫酷的動(dòng)畫之類的效果接觸的要少很多,而且這問題還經(jīng)常ios應(yīng)聘面試上唄問到磕洪,有必要自我總結(jié)一把蓖捶。
1,UIView
UIview浙宜,ios中所有的視圖都是從這個(gè)基類中派生出來的。
@interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem, UITraitEnvironment, UICoordinateSpace, UIFocusItem, CALayerDelegate>
從上面可以看出UIview繼承UIResponder蛹磺,而UIResponder 是集成NSObject的粟瞬。UIResponder是專門用來響應(yīng)用戶的操作處理各種事件的,包括觸摸事件(Touch Events)萤捆、運(yùn)動(dòng)事件(Motion Events)裙品、遠(yuǎn)程控制事件(Remote Control Events)俗批,它有UIview、UIApplication市怎、UIViewController等子類岁忘,其中比較特殊的UIWindow是直接繼承UIView的一個(gè)特殊View,所以這些類都是可以響應(yīng)事件区匠,也就是可以交互的干像。
(1)NSCoding協(xié)議
所有的原生類都實(shí)現(xiàn)這個(gè)協(xié)議,用于歸檔過程中的轉(zhuǎn)碼驰弄。這個(gè)協(xié)議中一共有兩個(gè)協(xié)議方法麻汰,而且是必須實(shí)現(xiàn)。其中一個(gè)是用于類本身進(jìn)行轉(zhuǎn)碼戚篙,一個(gè)是轉(zhuǎn)換成類的對象五鲫。
(2)UIAppearance協(xié)議和UIAppearanceContainer協(xié)議
這兩個(gè)協(xié)議規(guī)范UIKit的,允許開發(fā)者通過協(xié)議自定義控件所屬區(qū)域以呈現(xiàn)特定的外觀效果岔擂。
(3)UIDynamicItem
UIDynamicItem是iOS7新加特性位喂,用于支持UIView的物理引擎,可以讓我們自定義UI控件的物理特性(平衡球玩過沒B伊椤K苎隆)
(4)UITraitEnvironment
UITraitEnvironment這個(gè)接口主要跟Size Classes有關(guān),也就是跟視圖布局有關(guān)阔蛉。UITraitEnvironment接口中有一個(gè)traitCollection屬性弃舒,這個(gè)traitCollection屬性的對象包含Size Class,有利于進(jìn)一步確定頁面布局状原。
UITraitEnvironment詳情資料:https://onevcat.com/2014/07/ios-ui-unique/
(5)UICoordinateSpace
UICoordinateSpace協(xié)議主要用來處理iOS8以后的window和screen之間的坐標(biāo)轉(zhuǎn)換問題。
(6)UIFocusItem
沒了解過苗踪,有了解的歡迎回復(fù)颠区!
(7)CALayerDelegate
CALayerDelegate中有有CALayer展示過程控制的方法,也有響應(yīng)action的方法- (nullable id)actionForLayer:(CALayer *)layer forKey:(NSString *)event;可以獲取響應(yīng)的是那個(gè)layer通铲。
UIview中具體的屬性和方法不做解釋毕莱,從UIview繼承類和實(shí)現(xiàn)的協(xié)議代理上可以看出UIview可以處理觸摸事件,可以繪圖颅夺,支持物理特性朋截,可以做簡單的動(dòng)畫。
2吧黄,CALayer
CALayer類在概念上和UIView類似部服,同樣也是一些被層級(jí)關(guān)系樹管理的矩形塊,同樣也可以包含一些內(nèi)容(像圖片拗慨,文本或者背景色)廓八,管理子圖層的位置奉芦。它們有一些方法和屬性用來做動(dòng)畫和變換。
CALayer : NSObject<NSCoding, CAMediaTiming>
其中CAMediaTiming協(xié)議是一個(gè)控制layer圖層展示效果中時(shí)間剧蹂,速度各種屬性的
3声功,UIview與CALayer區(qū)別聯(lián)系--總結(jié)
區(qū)別:UIview與CALayer最大的不同就是CALayer不能處理用戶交互問題,而UIView可以宠叼。CALayer并不清楚具體的響應(yīng)鏈(iOS通過視圖層級(jí)關(guān)系用來傳送觸摸事件的機(jī)制)先巴,因此它并不能夠響應(yīng)事件,即使它提供了一些方法來判斷是否一個(gè)觸點(diǎn)在圖層的范圍冒冬。
聯(lián)系:每個(gè)UIview都有一個(gè)CALayer實(shí)例的圖層屬性--backing layer伸蚯,layer管理控制著視圖的繪制和顯示并提供相應(yīng)的尺寸樣式。
個(gè)人整理總結(jié)窄驹,不喜勿噴朝卒,謝謝!乐埠!