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];
相關文章
- AutoLayer自動佈局流程
- iOS導航欄佈局相關iOS
- iOS自動佈局——Masonry詳解iOS
- iOS 自動佈局框架 – Masonry 詳解iOS框架
- iOS自動佈局框架 - Masonry詳解iOS框架
- [分享]iOS開發 - iOS自動佈局的替換方案iOS
- 佈局流程
- 系統學習iOS動畫之二:自動佈局iOS動畫
- CSS佈局相關基本概念CSS
- Caramba Switcher for mac自動鍵盤佈局開關Mac
- 【OC梳理】自動佈局
- Masonry自動佈局使用
- 頁面佈局的相關內容
- D3佈局的相關apiAPI
- 佈局管理器——相對佈局
- 深度瞭解自動泊車技術及相關資料標註方法 | 自動駕駛自動駕駛
- 中手遊佈局體育電競,自研跨端遊戲《代號:籃球3V3》及打造相關賽事跨端遊戲
- iOS自動佈局(Autolayout)之VFL(視覺化格式語言)iOS視覺化
- CSS-佈局7-多列自動劇中CSS
- CSS佈局 --- 自適應佈局CSS
- 【iOS】關於 UICollectionView 的自定義佈局iOSUIView
- java:佈局方法(流佈局)Java
- 巨頭爭相佈局自動駕駛 技術與立法短板待補自動駕駛
- DependentLayout相對佈局
- iOS 應用效能測試的相關方法、工具及技巧iOS
- autorandr:自動調整螢幕佈局
- 電信網路拓撲圖自動佈局之曲線佈局
- android佈局------RelativeLayout(相對佈局)詳解Android
- RelativeLayout相對佈局
- CSS及佈局CSS
- 三欄佈局之自適應佈局
- 盒模型的相關計算及flex佈局的不常見規律總結模型Flex
- 移動端的適配及佈局
- iOS線性佈局iOS
- IOS 介面佈局 AutoLayoutiOS
- 浮動佈局 和 flex佈局Flex
- “街籃之父”加盟,中手遊佈局體育電競,自研跨端遊戲《代號:籃球3V3》及打造相關賽事跨端遊戲
- iOS開發之自定義表情鍵盤(元件封裝與自動佈局)iOS元件封裝