創(chuàng)建視圖對(duì)象
初始化并返回具有指定框架矩形的新分配的視圖對(duì)象。
- (instancetype)initWithFrame:(CGRect)frame;
// frame
視圖的框架矩形杭隙,以點(diǎn)為單位度量缠诅。
框架的原點(diǎn)相對(duì)于您計(jì)劃在其中添加它的父視圖官帘。
此方法使用框架矩形相應(yīng)地設(shè)置center和bounds屬性介粘。
// 討論
新視圖對(duì)象必須插入到窗口的視圖層次結(jié)構(gòu)中才能使用丛晌。
如果你以編程方式創(chuàng)建一個(gè)視圖對(duì)象,這個(gè)方法是UIView類的指定初始化器。
子類可以覆蓋此方法來執(zhí)行任何自定義初始化包颁,但必須在實(shí)現(xiàn)開始時(shí)調(diào)用super瞻想。
如果使用Interface Builder設(shè)計(jì)接口,則在隨后從nib文件加載視圖對(duì)象時(shí)不會(huì)調(diào)用此方法娩嚼。
nib文件中的對(duì)象被重新構(gòu)造蘑险,然后使用它們的initWithCoder:方法初始化,該方法修改視圖的屬性以匹配存儲(chǔ)在nib文件中的屬性待锈。
有關(guān)如何從nib文件加載視圖的詳細(xì)信息漠其,請(qǐng)參閱Resource Programming Guide。
---------------------------------------------------------------------------------
- (instancetype)initWithCoder:(NSCoder *)aDecoder;
配置視圖的視覺外觀
視圖的背景顏色竿音。
@property(nonatomic, copy) UIColor *backgroundColor;
可以動(dòng)畫化對(duì)該屬性的更改和屎。默認(rèn)值為nil,這將產(chǎn)生透明的背景顏色春瞬。
---------------------------------------------------------------------------------
確定視圖是否隱藏的布爾值柴信。
@property(nonatomic, getter=isHidden) BOOL hidden;
// 討論
將此屬性的值設(shè)置為YES將隱藏接收方,將其設(shè)置為NO將顯示接收方宽气。
默認(rèn)值是NO随常。
隱藏視圖將從其窗口中消失,并且不接收輸入事件萄涯。
不過绪氛,它仍然保留在父視圖的子視圖列表中,并像往常一樣參與自動(dòng)調(diào)整大小涝影。
隱藏具有子視圖的視圖具有隱藏這些子視圖及其可能具有的任何視圖后代的效果枣察。
這種效果是隱式的,不會(huì)改變接收者后代的隱藏狀態(tài)燃逻。
隱藏窗口當(dāng)前第一個(gè)響應(yīng)器的視圖會(huì)導(dǎo)致視圖的下一個(gè)有效鍵視圖成為新的第一個(gè)響應(yīng)者序目。
此屬性的值僅反映接收方的狀態(tài),不反映視圖層次結(jié)構(gòu)中接收方祖先的狀態(tài)伯襟。
因此猿涨,這個(gè)屬性可以是NO,但是如果隱藏了一個(gè)祖先姆怪,則接收者仍然可能被隱藏叛赚。
---------------------------------------------------------------------------------
視圖的alpha值。
@property(nonatomic) CGFloat alpha;
// 討論
此屬性的值是0.0到1.0范圍內(nèi)的浮點(diǎn)數(shù)稽揭,其中0.0表示完全透明俺附,1.0表示完全不透明。
更改此屬性的值只更新當(dāng)前視圖的alpha值淀衣。
然而,alpha值所賦予的透明度會(huì)影響視圖的所有內(nèi)容召调,包括子視圖膨桥。
例如蛮浑,一個(gè)alpha值為1.0的子視圖嵌入到一個(gè)alpha值為0.5的父視圖中,就會(huì)出現(xiàn)在屏幕上只嚣,就好像它的alpha值也是0.5一樣沮稚。
可以動(dòng)畫化對(duì)該屬性的更改。
---------------------------------------------------------------------------------
一個(gè)布爾值册舞,用于確定視圖是否不透明蕴掏。
@property(nonatomic, getter=isOpaque) BOOL opaque;
// 討論
這個(gè)屬性向繪圖系統(tǒng)提供了一個(gè)提示,說明它應(yīng)該如何處理視圖调鲸。
如果設(shè)置為YES盛杰,繪圖系統(tǒng)將視圖視為完全不透明的,這允許繪圖系統(tǒng)優(yōu)化一些繪圖操作并提高性能藐石。
如果設(shè)置為NO即供,繪圖系統(tǒng)通常會(huì)將視圖與其他內(nèi)容組合在一起。此屬性的默認(rèn)值為YES于微。
一個(gè)不透明的視圖應(yīng)該用完全不透明的內(nèi)容來填充其邊界——也就是說逗嫡,內(nèi)容的alpha值應(yīng)該為1.0。
如果視圖是不透明的株依,或者沒有填充其邊界驱证,或者包含全部或部分透明的內(nèi)容,那么結(jié)果是不可預(yù)測的恋腕。
如果視圖是完全透明或部分透明的抹锄,您應(yīng)該始終將此屬性的值設(shè)置為NO。
您只需要為UIView的子類中的不透明屬性設(shè)置一個(gè)值吗坚,這些子類使用drawRect:方法繪制它們自己的內(nèi)容祈远。
不透明屬性在系統(tǒng)提供的類(如UIButton、UILabel商源、UITableViewCell等)中不起作用车份。
---------------------------------------------------------------------------------
視圖層次結(jié)構(gòu)中的第一個(gè)非默認(rèn)顏色值,從視圖本身開始升序牡彻。
@property(nonatomic, strong) UIColor *tintColor;
// 討論
如果系統(tǒng)無法在層次結(jié)構(gòu)中找到非默認(rèn)顏色扫沼,則此屬性的值將改為系統(tǒng)定義的顏色。
如果視圖的 tintAdjustmentMode 屬性的值是 UIViewTintAdjustmentModeDimmed庄吼,那么tintColor屬性值將自動(dòng)變暗缎除。
若要在此屬性更改時(shí)刷新子視圖呈現(xiàn),請(qǐng)覆蓋tintColorDidChange方法总寻。
不支持模式顏色(如UIColor中所述)器罐。
// 注意
如果您嘗試使用圖案顏色作為 tint color,系統(tǒng)會(huì)引發(fā)異常渐行。
---------------------------------------------------------------------------------
視圖層次結(jié)構(gòu)中的第一個(gè)非默認(rèn)色調(diào)調(diào)整模式值轰坊,從視圖本身開始升序铸董。
@property(nonatomic) UIViewTintAdjustmentMode tintAdjustmentMode;
// 討論
當(dāng)此屬性的值為 UIViewTintAdjustmentModeDimmed 時(shí),將修改tintColor屬性的值以提供一個(gè)調(diào)暗的外觀肴沫。
如果在查詢此屬性時(shí)系統(tǒng)無法在子視圖層次結(jié)構(gòu)中找到非默認(rèn)值粟害,則該值為UIViewTintAdjustmentModeNormal。
當(dāng)此屬性的值發(fā)生更改(通過視圖的值更改或其父視圖的值更改)時(shí)颤芬,系統(tǒng)調(diào)用tintColorDidChange方法來允許視圖刷新其呈現(xiàn)悲幅。
---------------------------------------------------------------------------------
一個(gè)布爾值,用于確定子視圖是否局限于視圖的邊界站蝠。
@property(nonatomic) BOOL clipsToBounds;
// 討論
將此值設(shè)置為YES會(huì)將子視圖剪切到接收器的邊界汰具。
如果設(shè)置為NO,則不剪切幀超出接收器可見邊界的子視圖沉衣。默認(rèn)值是NO郁副。
---------------------------------------------------------------------------------
一個(gè)布爾值,用于確定在繪制之前是否應(yīng)自動(dòng)清除視圖的邊界豌习。
@property(nonatomic) BOOL clearsContextBeforeDrawing;
// 討論
當(dāng)設(shè)置為YES時(shí)存谎,在調(diào)用drawRect:方法之前,繪圖緩沖區(qū)將自動(dòng)清除為透明黑色肥隆。
此行為確保在重新繪制視圖的內(nèi)容時(shí)不會(huì)留下任何可視構(gòu)件既荚。
如果視圖的不透明屬性也設(shè)置為YES,則視圖的backgroundColor屬性不能為nil栋艳,否則可能會(huì)發(fā)生繪圖錯(cuò)誤恰聘。
此屬性的默認(rèn)值為YES。
如果將此屬性的值設(shè)置為NO吸占,則負(fù)責(zé)確保在drawRect: method中正確繪制視圖的內(nèi)容晴叨。
如果您的繪圖代碼已經(jīng)進(jìn)行了大量優(yōu)化,那么將此屬性設(shè)置為NO可以提高性能矾屯,尤其是在滾動(dòng)時(shí)兼蕊,可能只需要重新繪制視圖的一部分。
---------------------------------------------------------------------------------
一個(gè)可選視圖件蚕,其alpha通道用于屏蔽視圖的內(nèi)容孙技。
@property(nonatomic, strong) UIView *maskView;
// 討論
視圖的alpha通道決定了視圖的內(nèi)容和背景顯示了多少。
完全或部分不透明像素允許底層內(nèi)容通過但完全透明的像素塊顯示該內(nèi)容排作。
---------------------------------------------------------------------------------
返回用于為該類的實(shí)例創(chuàng)建層的類牵啦。
@property(class, nonatomic, readonly) Class layerClass;
// 討論
默認(rèn)情況下,該方法返回CALayer類對(duì)象妄痪。
子類可以覆蓋此方法并根據(jù)需要返回一個(gè)不同的層類哈雏。
例如,如果您的視圖使用平鋪顯示一個(gè)大的可滾動(dòng)區(qū)域,您可能想要覆蓋這個(gè)屬性并返回CATiledLayer類裳瘪,如清單1所示履因。
清單1,返回一個(gè)平鋪層
override class var layerClass : AnyClass {
return CATiledLayer.self
}
為了創(chuàng)建相應(yīng)的層對(duì)象盹愚,在創(chuàng)建視圖的早期只調(diào)用此方法一次。
---------------------------------------------------------------------------------
視圖的核心動(dòng)畫層站故,用于渲染皆怕。
@property(nonatomic, readonly, strong) CALayer *layer;
// 討論
這個(gè)屬性從不為空。
對(duì)象的實(shí)際類由layerClass屬性中返回的值決定西篓。view是layer的代理愈腾。
// 警告
因?yàn)橐晥D是層的委托,所以永遠(yuǎn)不要讓視圖成為另一個(gè)CALayer對(duì)象的委托岂津。
此外虱黄,永遠(yuǎn)不要更改這個(gè)層對(duì)象的委托。
配置與事件相關(guān)的行為
一個(gè)布爾值吮成,用于確定是否忽略用戶事件并將其從事件隊(duì)列中刪除橱乱。
@property(nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled;
// 討論
當(dāng)設(shè)置為NO時(shí),用于視圖的touch粱甫、press泳叠、keyboard和focus事件將被忽略,并從事件隊(duì)列中刪除茶宵。
當(dāng)設(shè)置為YES時(shí)危纫,事件將正常交付給視圖。
此屬性的默認(rèn)值為YES种蝶。
在動(dòng)畫期間,對(duì)動(dòng)畫中涉及的所有視圖暫時(shí)禁用用戶交互瞒大,而不考慮此屬性中的值螃征。
您可以通過在配置動(dòng)畫時(shí)指定UIViewAnimationOptionAllowUserInteraction選項(xiàng)來禁用此行為。
// 請(qǐng)注意
一些UIKit子類覆蓋這個(gè)屬性并返回一個(gè)不同的默認(rèn)值糠赦。
請(qǐng)參閱該類的文檔以確定它是否返回不同的值会傲。
---------------------------------------------------------------------------------
一個(gè)布爾值,指示視圖是否一次接收多個(gè)觸摸拙泽。
@property(nonatomic, getter=isMultipleTouchEnabled) BOOL multipleTouchEnabled;
// 討論
當(dāng)設(shè)置為YES時(shí)淌山,視圖接收所有與多點(diǎn)觸摸序列相關(guān)的觸摸,并在視圖的范圍內(nèi)開始顾瞻。
當(dāng)設(shè)置為NO時(shí)泼疑,視圖只接收從視圖邊界內(nèi)開始的多點(diǎn)觸摸序列中的第一個(gè)觸摸事件。
此屬性的默認(rèn)值為NO荷荤。
// 請(qǐng)注意
此屬性不影響附加到視圖的手勢識(shí)別器退渗。
手勢識(shí)別器接收視圖中發(fā)生的所有觸摸移稳。
當(dāng)此屬性為NO時(shí),同一窗口中的其他視圖仍然可以接收觸摸事件会油。
如果您希望此視圖僅處理多點(diǎn)觸摸事件个粱,請(qǐng)將此屬性和exclusive vetouch屬性的值都設(shè)置為YES。
此屬性不阻止視圖被要求處理多個(gè)觸摸翻翩。
例如亲澡,兩個(gè)子視圖都可以將它們的觸摸轉(zhuǎn)發(fā)給一個(gè)公共的父視圖桐臊,例如一個(gè)窗口或視圖控制器的根視圖况毅。
這個(gè)屬性決定有多少最初針對(duì)視圖的觸摸被交付到那個(gè)視圖导犹。
---------------------------------------------------------------------------------
一個(gè)布爾值,指示接收者是否僅處理觸摸事件桨仿。
@property(nonatomic, getter=isExclusiveTouch) BOOL exclusiveTouch;
// 討論
將此屬性設(shè)置為YES會(huì)導(dǎo)致接收者阻止將觸摸事件傳遞到同一窗口中的其他視圖睛低。
此屬性的默認(rèn)值為NO。
配置邊界和框架矩形
框架矩形服傍,它描述視圖在父視圖的坐標(biāo)系統(tǒng)中的位置和大小钱雷。
@property(nonatomic) CGRect frame;
// 討論
這個(gè)矩形定義了視圖在父視圖坐標(biāo)系中的大小和位置。
在布局操作期間使用此矩形設(shè)置視圖的大小和位置吹零。
設(shè)置此屬性將更改center屬性指定的點(diǎn)急波,并相應(yīng)地更改邊界矩形中的大小。
框架矩形的坐標(biāo)總是以點(diǎn)為單位指定的瘪校。
改變框架矩形會(huì)自動(dòng)重新顯示視圖澄暮,而不需要調(diào)用它的drawRect:方法。
如果你想讓UIKit在框架矩形改變時(shí)調(diào)用drawRect:方法阱扬,設(shè)置contentMode屬性為UIViewContentModeRedraw泣懊。
可以動(dòng)畫化對(duì)該屬性的更改。
但是麻惶,如果transform屬性包含一個(gè)非恒等變換馍刮,則frame屬性的值是未定義的,不應(yīng)該修改窃蹋。
在這種情況下卡啰,使用center屬性重新定位視圖,并使用bounds屬性調(diào)整大小警没。
---------------------------------------------------------------------------------
邊界矩形匈辱,它在自己的坐標(biāo)系中描述視圖的位置和大小。
@property(nonatomic) CGRect bounds;
// 討論
默認(rèn)邊界原點(diǎn)是(0,0)杀迹,大小與frame屬性中的矩形大小相同亡脸。
更改此矩形的大小部分將使視圖相對(duì)于其中心點(diǎn)增長或收縮。
更改大小還會(huì)更改frame屬性中要匹配的矩形的大小。
邊界矩形的坐標(biāo)總是以點(diǎn)為單位指定的浅碾。
更改邊界矩形將自動(dòng)重新顯示視圖大州,而不調(diào)用其drawRect:方法。
如果你想U(xiǎn)IKit調(diào)用drawRect:方法垂谢,設(shè)置contentMode屬性為UIViewContentModeRedraw厦画。
可以動(dòng)畫化對(duì)該屬性的更改。
---------------------------------------------------------------------------------
// 視圖框架矩形的中心點(diǎn)滥朱。
@property(nonatomic) CGPoint center;
// 討論
中心點(diǎn)以其父視圖的坐標(biāo)系統(tǒng)中的點(diǎn)指定苛白。
設(shè)置此屬性可適當(dāng)?shù)馗耭rame屬性中矩形的原點(diǎn)。
當(dāng)您想要更改視圖的位置時(shí)焚虱,請(qǐng)使用此屬性,而不是frame屬性懂版。
中心點(diǎn)總是有效的鹃栽,即使將縮放或旋轉(zhuǎn)因子應(yīng)用于視圖的轉(zhuǎn)換。
可以動(dòng)畫化對(duì)該屬性的更改躯畴。
---------------------------------------------------------------------------------
指定應(yīng)用于視圖的轉(zhuǎn)換民鼓,相對(duì)于其邊界的中心。
@property(nonatomic) CGAffineTransform transform;
// 討論
使用此屬性可在視圖的父視圖的坐標(biāo)系統(tǒng)中縮放或旋轉(zhuǎn)視圖的框架矩形蓬抄。
(要更改視圖的位置丰嘉,請(qǐng)修改center屬性。)此屬性的默認(rèn)值是CGAffineTransformIdentity嚷缭。
轉(zhuǎn)換相對(duì)于視圖的錨點(diǎn)發(fā)生饮亏。
默認(rèn)情況下,錨點(diǎn)等于框架矩形的中心點(diǎn)阅爽。
要更改錨點(diǎn)路幸,請(qǐng)修改視圖的底層CALayer對(duì)象的錨點(diǎn)屬性。
可以動(dòng)畫化對(duì)該屬性的更改付翁。
在iOS 8.0及更高版本中简肴,transform屬性不影響自動(dòng)布局。
自動(dòng)布局根據(jù)視圖的未轉(zhuǎn)換幀計(jì)算視圖的對(duì)齊矩形百侧。
// 警告
當(dāng)這個(gè)屬性的值不是恒等變換時(shí)砰识,frame屬性中的值是未定義的,應(yīng)該被忽略佣渴。