iOS中UIView的API詳解

1.png

從上圖我們可以看出UIView繼承于UIResponder

慣例,我們在看一個類的時候首先要看的是他的初始化方法:當然他的父類的初始化方法當然也是可以使用的,在這里我們不過多的延展,直接說我們UIView中的屬性和方法.

//初始化方法給定一個frame就可以了

- (instancetype)initWithFrame:(CGRect)aRect;

//背景色設置

@property(nonatomic, copy)?UIColor?*backgroundColor;

//view的顯隱性設置,默認為NO(其實就是將view的alpha值改為0.0),如果設置當前的view的hiddenYES,當前視圖以及其subviews都會隱藏,當前的view會從響應者鏈中移除,而響應者鏈中的下一個會成為第一響應者.

@property(nonatomic, getter=isHidden) BOOL hidden;

//透明度設置,默認為1.0(該屬性的取值范圍為0.0~1.0,表示從完全透明到完全不透明)

@property(nonatomic)?CGFloat?alpha;

//不透明度設置,默認為YES,但是UIButton等子類的默認值都是NO,這個屬性我們在這里要多嘮叨一下,雖然這個屬性不常用,但是也是很重要的.可以參考我的下一篇文章文章地址(UIView的alpha、hidden和opaque屬性之間的關系和區(qū)別)

@property(nonatomic, getter=isOpaque) BOOL opaque;

//當前view的渲染色,iOS7以后的屬性,在導航欄等控件上會使用到

@property(nonatomic, strong)?UIColor?*tintColor;

//渲染色調(diào)整模式是個枚舉

@property(nonatomic) UIViewTintAdjustmentMode tintAdjustmentMode;

//切除超出父視圖范圍的部分,默認為NO

@property(nonatomic) BOOL clipsToBounds;

//決定在視圖重畫之前是否先清理視圖以前的內(nèi)容,默認值為YES,如果你把這個屬性設為NO,那么你要保證能在 drawRect:方法中正確的繪畫。如果你的代碼已經(jīng)做了大量優(yōu)化,那么設為NO可以提高性能,尤其是在滾動時可能只需要重新繪畫視圖的一部分

@property(nonatomic) BOOL clearsContextBeforeDrawing;

//maskView(詳解maskView)是iOS8以上才有的方法,如果考慮版本的兼容問題,可以考慮用maskLayer替換,maskView(maskLayer)可類比多張png圖片的疊加遮罩,原理類似視圖遮罩屬性,你可以用一張透明的有漸變效果的圖片來的imageView設置為另一個imageView的maskView(這篇文章講解的很詳細)

@property(nonatomic, strong) UIView *maskView;

//獲取當前視圖的layer類

+ (Class)layerClass;

//屬于CALayer類,是一個很重要的屬性,用于視圖渲染的核心動畫層,CALayer(層)是屏幕上的一個矩形區(qū)域,在每一個UIView中都包含一個根CALayer,在UIView上的所有視覺效果都是在這個Layer上進行的,對于這個類的詳解會在以后跟進.

@property(nonatomic, readonly, strong)?CALayer?*layer;

//用戶交互是否打開

@property(nonatomic, getter=isUserInteractionEnabled ) BOOL userInteractionEnabled;

//是否允許多指觸摸

@property(nonatomic, getter=isMultipleTouchEnabled) BOOL multipleTouchEnabled;

//可以達到同一界面上多個控件接受事件時的排他性,從而避免一些問題。也就是說避免在一個界面上同時點擊多個button。

@property(nonatomic, getter=isExclusiveTouch) BOOL exclusiveTouch;

//控件相對于父視圖的位置和大小

@property(nonatomic)?CGRect?frame;

//控件相對于自身的位置和大小

@property(nonatomic)?CGRect?bounds;

//控件的中心點

@property(nonatomic)?CGPoint?center;

//設置空間的變化也可以用它來設置動畫

@property(nonatomic)?CGAffineTransform?transform;

//當前view的父視圖(只讀屬性)

@property(nonatomic, readonly) UIView *superview;

//當前view(控件)的子視圖們

@property(nonatomic, readonly, copy)?NSArray<__kindofUIView*> *subviews;

//當前視圖的window,一個app只有一個window

@property(nonatomic, readonly)?UIWindow?*window;

//添加view為當前view的子視圖

- (void)addSubview:(UIView *)view;

//將view提到最前面

- (void)bringSubviewToFront:(UIView *)view;

//將view放置到最后一層

- (void)sendSubviewToBack:(UIView *)view;

//當前視圖從其父視圖上移除

- (void)removeFromSuperview;

//插入一個視圖在index位置

- (void)insertSubview:(UIView *)view?atIndex:(NSInteger)index;

//將view放置到siblingSubview的上面

- (void)insertSubview:(UIView *)view?aboveSubview:(UIView *)siblingSubview;

//將view放置到siblingSubview下面

- (void)insertSubview:(UIView *)view?belowSubview:(UIView *)siblingSubview;

//將index1位置的view和index2位置上的view圖層互換

- (void)exchangeSubviewAtIndex:(NSInteger)index1?withSubviewAtIndex:(NSInteger)index2;

//是否是view的子視圖

- (BOOL)isDescendantOfView:(UIView *)view;

//自動調(diào)整view的邊界的位置(默認是UIViewAutoresizingNone)

@property(nonatomic) UIViewAutoresizing autoresizingMask;

//如果視圖的autoresizesSubviews屬性聲明被設置為YES,則其子視圖會根據(jù)autoresizingMask屬性的值自動進行尺寸調(diào)整.eg:self.autoresizingMask = UIViewAutoresizingFlexibleWidth;這個常量如果被設置,視圖的寬度將和父視圖的寬度一起成比例變化。否則,視圖的寬度將保持不變.

@property(nonatomic) BOOL autoresizesSubviews;

//視圖的填充類型(枚舉,可以用imageView試一下填充效果)

@property(nonatomic) UIViewContentMode contentMode;

//視圖的拉伸(水平拉伸和垂直拉伸)

@property(nonatomic)?CGRect?contentStretch;

//view根據(jù)size來適應控件的size

- (CGSize)sizeThatFits:(CGSize)size;

//eg:label的寬高根據(jù)label上的text來適應寬高

- (void)sizeToFit;

如果你感覺對你有幫助,請留言或者關注我的微信公眾號西河老伯iOS開發(fā)來支持我!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容