聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

View、Control、Layer對象的布局方法

來源:CSDN 時間:2023-01-06 08:22:25


(資料圖片僅供參考)

首先明確兩個概念:

UIWindow 對象        : 整個程序中視圖層次結構中最頂層,充當一個容器類。UIViewController 對象 :viewController 中一個 view屬性是 view層次結構中rootView,可以添加 view構建復雜的視圖結構,通過生命周期方法loadView、viewDidLoad、viewWillAppear 等控制視圖聲明周期,因為他繼承于 UIResponder,所以可以響應和處理用戶事件。View、 Control 、 Layer 對象 :view可以通過 addSubView 和 removeFromSuperView等方法管理視圖層次結構,使用 layoutSubviews、layoutIfNeeded 和 setNeedsLayout 等方法布局 view的層次結構,當系統提供的 view無法滿足需要,可以重寫 drawRect 方法或者通過 layer屬性構造更加復雜的圖形和動畫。              iOS中布局相關方法    - (CGSize)sizeThatFits:(CGSize)size;   - (void)sizeToFit;  sizeToFit 自動調用 sizeThatFits 方法,不能在子類中重寫 sizeToFit ----------------------------------------------------------------------    - (void)layoutSubViews;   - (void)layoutIfNeeded;   - (void)setNeedsLayout    layoutSubviews 在以下情況下會被調用 init初始化不會觸發 layoutSubviews,但是 initWithFrame 進行初始化會被調用,當 rect 的值不為 CGRectZero 時,也會觸發。addSubView會觸發 layoutSubviews設置 view的 frame 會觸發 layoutSubviews滾動 ScrollView 時會觸發 layoutSubviews旋轉 Screen 會觸發 父view 上的 layoutSubviews改變一個 view的大小也會觸發父view的 layoutSubviews,所以重寫這個方法要調用 [super layoutSubViews] setNeedsLayout 標記需要刷新布局的控件,下一次運行循環的時候會刷新布局,異步調用 layoutIfNeeded——>layoutIfNeeded,立即刷新布局——>layoutSubViews --------------------------------------------------------------------- - (void)setNeedsDisplay;- (void)drawRect; setNeedsDisplay 方法,標記為重繪,異步調用 drawRect 方法 drawRect 方法,重寫此方法,執行重繪任務 這個兩個方法都沒沒有遞歸,對 subViews 也不負責,只負責自己。 ---------------------------------------------------------------------

layoutSubviews對subviews重新布局

layoutSubviews方法調用先于drawRect

setNeedsLayout在receiver標上一個需要被重新布局的標記,在系統runloop的下一個周期自動調用layoutSubviews

layoutIfNeeded方法如其名,UIKit會判斷該receiver是否需要layout.根據Apple官方文檔,layoutIfNeeded方法應該是這樣的

layoutIfNeeded遍歷的不是superview鏈,應該是subviews鏈

drawRect是對receiver的重繪,能獲得context

setNeedDisplay在receiver標上一個需要被重新繪圖的標記,在下一個draw周期自動重繪,iphone device的刷新頻率是60hz,也就是1/60秒后重繪

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 岛国精品在线