在app上看得見的摸得着的都是
UIView
以及它的子類對象。
UIWindow
UILabel
UIPickerView
UIProgressView
UIActivityIndicatorView
UIImageView
UITabBar
UIToolbar
UINavigationBar
UITableViewCell
UIActionSheet
UIAlertView
UIScrollView
UISearchBar
UIWebView
UIControl
這些類的父類都是
UIView
,
UIView
的方法和屬性這些子類都可以使用,是以
UIView
在iOS開發中非常重要。
-
的父視圖view
@property(nonatomic,readonly) UIView *superview;
-
的所有子視圖。這是個數組,當需要view
上的某個子視圖時根據數組下标取或周遊出來view
@property(nonatomic,readonly,copy) NSArray *subviews;
-
的視窗view
@property(nonatomic,readonly) UIWindow *window;
- 從父視圖上移除
- (void)removeFromSuperview;
- 插入一個子視圖,并指定索引位置
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- 交換兩個位置的子視圖
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- 添加一個子視圖
- (void)addSubview:(UIView *)view;
- 插入一個子視圖在某個子視圖的下面
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- 插入一個子視圖在某個子視圖的上面
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- 将一個子視圖移到前面
- (void)bringSubviewToFront:(UIView *)view;
- 将一個子視圖移到後面
回調的方法- (void)sendSubviewToBack:(UIView *)view;
-
已經添加子視圖view
- (void)didAddSubview:(UIView *)subview;
-
将要移除子視圖view
- (void)willRemoveSubview:(UIView *)subview;
-
将要移動到新的父視圖view
- (void)willMoveToSuperview:(UIView *)newSuperview;
-
已經移動到父視圖view
- (void)didMoveToSuperview;
-
将要移動到新的view
window
- (void)willMoveToWindow:(UIWindow *)newWindow;
-
已經移動到view
window
- (void)didMoveToWindow;
- 是否是指定
的子視圖。傳回view
或YES
NO
- (BOOL)isDescendantOfView:(UIView *)view;
- 根據
值取出這個tag
view
- (UIView *)viewWithTag:(NSInteger)tag;
- 下面三個方法和布局相關,感興趣的朋友可以深入研究。
的UIView
和setNeedsDisplay
方法。首先兩個方法都是異步執行的。而setNeedsLayout
會自動調用setNeedsDisplay
方法,這樣可以拿到drawRect
,就可以畫畫了。而UIGraphicsGetCurrentContext
會預設調用setNeedsLayout
layoutSubViews
,就可以處理子視圖中的一些資料。
綜上所訴,
友善繪圖,而setNeedsDisplay
友善出來資料。layoutSubViews
- (void)setNeedsLayout;
- 如果需要進行布局
- (void)layoutIfNeeded;
- 可以在自己定制的視圖中重載這個方法,用來調整子視圖的尺寸和位置。自動調用
方法。layoutIfNeeded
layoutSubviews
在以下情況下會被調用:
1.
初始化不會觸發init
,但是是用layoutSubviews
進行初始化時,當initWithFrame
的值不為rect
CGRectZero
時,也會觸發
2.
會觸發addSubview
3.設定layoutSubviews
的view
會觸發frame
,當然前提是layoutSubviews
frame
的值設定前後發生了變化
4.滾動一個
會觸發UIScrollView
5.旋轉layoutSubviews
會觸發父screen
上的UIView
layoutSubviews
事件
6.改變一個
大小的時候也會觸發父UIView
上的layoutSubviews事件UIView
- (void)layoutSubviews;