iOS中AutoLayer自動佈局流程及相關方法
http://my.oschina.net/w11h22j33/blog/208574
http://www.jianshu.com/p/eb2c4bb4e3f1
layoutSubviews
setNeedsLayout
layoutIfNeeded
一、layoutSubviews在以下情況被呼叫:
1、init初始化不會觸發layoutSubviews
2、addSubview會觸發layoutSubviews
3、設定view的Frame會觸發layoutSubviews,當然前提是frame的值設定前後發生了變化
4、滾動一個UIScrollView會觸發layoutSubviews
5、旋轉Screen會觸發父UIView上的layoutSubviews事件
6、改變一個UIView大小的時候也會觸發父UIView上的layoutSubviews事件
二、setNeedsLayout
此方法會將view當前的layout設定為無效的,並在下一個upadte cycle裡去觸發layout更新。
標記為需要重新佈局,非同步呼叫layoutIfNeeded重新整理佈局,不立即重新整理,但layoutSubviews一定會被呼叫。
三、layoutIfNeeded
如果有需要重新整理的標記,立即呼叫layoutSubviews進行佈局,如果沒有標記,不會呼叫實現佈局。
使用此方法強制立即進行layout,從當前view開始,此方法會遍歷整個view層次(包括superviews)請求layout。因此,呼叫此方法會強制整個view層次佈局。
如果要立即重新整理,要先呼叫[view setNeedsLayout],把標記設為需要佈局,然後馬上呼叫[view layoutIfNeeded],實現佈局
在檢視第一次顯示之前,標記總是“需要重新整理”的,可以直接呼叫[view layoutIfNeeded]
四、重繪
-drawRect:(CGRect)rect方法:重寫此方法,執行重繪任務
-setNeedsDisplay方法:標記為需要重繪,非同步呼叫drawRect
-setNeedsDisplayInRect:(CGRect)invalidRect方法:標記為需要區域性重繪
sizeToFit會自動呼叫sizeThatFits方法;
sizeToFit不應該在子類中被重寫,應該重寫sizeThatFits
sizeThatFits傳入的引數是receiver當前的size,返回一個適合的size
sizeToFit可以被手動直接呼叫
sizeToFit和sizeThatFits方法都沒有遞迴,對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秒後重繪
updattingConstraints 其從下向上(from subview to super view),為下一步layout準備資訊。
[self.view setNeedsUpdateContraints];
[self.view updateContraintsIfNeeded];
[self updateContraints];
layout 其從上向下(from super view to subview),此步主要應用上一步的資訊去設定view的center和bounds。
[self layoutIfNeeded];
display 此步時把view渲染到螢幕上,它與你是否使用Auto layout無關,其操作是從上向下(from super view to subview),
[self setNeedDisplay];
相關文章
- iOS自動佈局——Masonry詳解iOS
- 系統學習iOS動畫之二:自動佈局iOS動畫
- CSS佈局相關基本概念CSS
- 佈局流程
- Caramba Switcher for mac自動鍵盤佈局開關Mac
- 【OC梳理】自動佈局
- 頁面佈局的相關內容
- D3佈局的相關apiAPI
- 【iOS】關於 UICollectionView 的自定義佈局iOSUIView
- 深度瞭解自動泊車技術及相關資料標註方法 | 自動駕駛自動駕駛
- 使用 CSS columns 佈局來實現自動分組佈局CSS
- java:佈局方法(流佈局)Java
- CSS佈局 --- 自適應佈局CSS
- DependentLayout相對佈局
- 盒模型的相關計算及flex佈局的不常見規律總結模型Flex
- 中手遊佈局體育電競,自研跨端遊戲《代號:籃球3V3》及打造相關賽事跨端遊戲
- 移動端的適配及佈局
- 三欄佈局之自適應佈局
- Swift iOS : 使用Cartography佈局SwiftiOS
- iOS Flexbox 佈局優化iOSFlex優化
- 浮動佈局 和 flex佈局Flex
- Android入門教程 | UI佈局之RelativeLayout 相對佈局AndroidUI
- css佈局方法CSS
- iOS記憶體管理佈局及管理方案-理論篇iOS記憶體
- 三列自適應佈局(聖盃佈局)
- UITableViewCell使用自動佈局的“最佳實踐”UIView
- Masonry佈局控制元件,自動換行控制元件
- 2020-12-17 html、css面試題3: 水平垂直居中,左右固定中間自適應 三欄佈局,靜態佈局、自適應佈局、流式佈局、響應式佈局、彈性佈局,IE中常見的相容性問題,清空陣列的方法HTMLCSS面試題陣列
- Grid 佈局-子項補充及常用佈局
- 實現一個上下固定,中間自動填滿的佈局
- iOS 常用佈局方式之ConstraintiOSAI
- 如何實現兩欄佈局,右側自適應?三欄佈局中間自適應呢?
- [譯] 你 Ladar 中該珍藏的:iOS 佈局語言iOS
- 動作遊戲的本質及相關設計方法論遊戲
- Jquery 動態增加option及獲取值 遍歷option相關方法jQuery
- 網頁佈局方法網頁
- 計劃自動相關條件
- app啟動流程,activity啟動流程時序圖,binder相關資料APP時序圖
- 移動佈局基礎之 流式佈局