在app上看得見的摸得著的都是UIView
以及它的子類對(duì)象傍药。
UIWindow
UILabel
UIPickerView
UIProgressView
UIActivityIndicatorView
UIImageView
UITabBar
UIToolbar
UINavigationBar
UITableViewCell
UIActionSheet
UIAlertView
UIScrollView
UISearchBar
UIWebView
UIControl
這些類的父類都是UIView
焕窝,UIView
的方法和屬性這些子類都可以使用扑毡,所以UIView
在iOS開發(fā)中非常重要戳葵。
-
view
的父視圖
@property(nonatomic,readonly) UIView *superview; -
view
的所有子視圖筋量。這是個(gè)數(shù)組植袍,當(dāng)需要view
上的某個(gè)子視圖時(shí)根據(jù)數(shù)組下標(biāo)取或遍歷出來
@property(nonatomic,readonly,copy) NSArray *subviews; -
view
的窗口
@property(nonatomic,readonly) UIWindow *window; - 從父視圖上移除
- (void)removeFromSuperview; - 插入一個(gè)子視圖,并指定索引位置
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index; - 交換兩個(gè)位置的子視圖
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2; - 添加一個(gè)子視圖
- (void)addSubview:(UIView *)view; - 插入一個(gè)子視圖在某個(gè)子視圖的下面
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview; - 插入一個(gè)子視圖在某個(gè)子視圖的上面
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview; - 將一個(gè)子視圖移到前面
- (void)bringSubviewToFront:(UIView *)view; - 將一個(gè)子視圖移到后面
- (void)sendSubviewToBack:(UIView *)view;
回調(diào)的方法
-
view
已經(jīng)添加子視圖
- (void)didAddSubview:(UIView *)subview; -
view
將要移除子視圖
- (void)willRemoveSubview:(UIView *)subview; -
view
將要移動(dòng)到新的父視圖
- (void)willMoveToSuperview:(UIView *)newSuperview; -
view
已經(jīng)移動(dòng)到父視圖
- (void)didMoveToSuperview; -
view
將要移動(dòng)到新的window
- (void)willMoveToWindow:(UIWindow *)newWindow; -
view
已經(jīng)移動(dòng)到window
- (void)didMoveToWindow;
- 是否是指定
view
的子視圖打颤。返回YES
或NO
- (BOOL)isDescendantOfView:(UIView *)view; - 根據(jù)
tag
值取出這個(gè)view
- (UIView *)viewWithTag:(NSInteger)tag; - 下面三個(gè)方法和布局相關(guān)暴拄,感興趣的朋友可以深入研究漓滔。
UIView
的setNeedsDisplay
和setNeedsLayout
方法。首先兩個(gè)方法都是異步執(zhí)行的乖篷。而setNeedsDisplay
會(huì)自動(dòng)調(diào)用drawRect
方法响驴,這樣可以拿到UIGraphicsGetCurrentContext
,就可以畫畫了撕蔼。而setNeedsLayout
會(huì)默認(rèn)調(diào)用layoutSubViews
豁鲤,就可以處理子視圖中的一些數(shù)據(jù)。
綜上所訴鲸沮,setNeedsDisplay
方便繪圖琳骡,而layoutSubViews
方便出來數(shù)據(jù)。
- (void)setNeedsLayout; - 如果需要進(jìn)行布局
- (void)layoutIfNeeded; - 可以在自己定制的視圖中重載這個(gè)方法诉探,用來調(diào)整子視圖的尺寸和位置日熬。自動(dòng)調(diào)用
layoutIfNeeded
方法棍厌。
layoutSubviews
在以下情況下會(huì)被調(diào)用:
1.init
初始化不會(huì)觸發(fā)layoutSubviews
肾胯,但是是用initWithFrame
進(jìn)行初始化時(shí),當(dāng)rect
的值不為CGRectZero
時(shí),也會(huì)觸發(fā)
2.addSubview
會(huì)觸發(fā)layoutSubviews
3.設(shè)置view
的frame
會(huì)觸發(fā)layoutSubviews
耘纱,當(dāng)然前提是frame
的值設(shè)置前后發(fā)生了變化
4.滾動(dòng)一個(gè)UIScrollView
會(huì)觸發(fā)layoutSubviews
5.旋轉(zhuǎn)screen
會(huì)觸發(fā)父UIView
上的layoutSubviews
事件
6.改變一個(gè)UIView
大小的時(shí)候也會(huì)觸發(fā)父UIView
上的layoutSubviews事件
- (void)layoutSubviews;