<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

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

              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 中文字幕在线观看亚洲日韩