Auto Layout的生命周期

Auto Layout的生命周期


Auto Layout 不只有布局算法 Cassowary老玛,還包含了布局在運行時的生命周期等一整套布局引擎系統(tǒng)淤年,用來統(tǒng)一管理布局創(chuàng)建钧敞、更新和銷毀。這套系統(tǒng)叫做Layout Engine

Auto Layout布局流程

696463-13cb1bc293287cf9.jpg

關(guān)于Auto Layout的布局流程互亮,Apple給出圖示如上:即Layout Cycle是一個在App運行循環(huán)RunLoop下循環(huán)執(zhí)行的一個過程犁享。

  • App啟動后開啟RunLoop,循環(huán)檢測圖層樹中是否存在約束變化豹休;

  • 當(dāng)發(fā)生Constrints Change(直接or間接設(shè)置炊昆、更新、移除約束),RunLoop檢測到約束變化威根;

  • RunLoop發(fā)現(xiàn)約束變化后凤巨,就會進入Deferred Layout階段,視圖的位置洛搀、尺寸值會在這個過程計算敢茁,設(shè)置到對應(yīng)視圖上,并繪制出來留美;

  • 執(zhí)行完一輪布局彰檬,RunLoop會繼續(xù)檢查視圖樹的約束更新情況,當(dāng)再次發(fā)現(xiàn)約束更新谎砾,則執(zhí)行新一輪布局……

Constraints Change (約束變化)

Constraints Change過程包括兩個步驟:約束更新逢倍;Layout Engine重新計算布局,獲取到布局后調(diào)用superview.setNeedLayout(),然后進入Deferred Layout Pass景图。

Deferred Layout Pass (延遲布局)

Deferred Layout Pass 分為兩步:

  • 更新約束:從下往上(子視圖到父視圖)较雕,依次遍歷視圖層級,調(diào)用View的updateConstraints方法(或ViewController的updateViewConstraints方法)來更新約束(你可以在此覆蓋本方法來設(shè)置自定義約束挚币,且在此設(shè)置時亮蒋,執(zhí)行效率最高。記得最后調(diào)用父類實現(xiàn))妆毕。
  • 給視圖及子視圖重新設(shè)定位置(給view的frame賦值):從上到下依次調(diào)用View的layoutSubViews方法(或ViewController的viewLayoutSubViews方法)慎玖,從Layout Engine中取出預(yù)算好的frame進行賦值(你可以覆蓋此方法實現(xiàn)自定義布局,不過此刻不是穩(wěn)態(tài)设塔,需要在適合時候調(diào)用父類實現(xiàn))凄吏。

延遲布局的觸發(fā)條件
setNeedsUpdateConstraints 下一次loop執(zhí)行updateConstraints
updateConstraintsIfNeeded 立即執(zhí)行updateConstraints
setNeedsLayout 下一次loop執(zhí)行l(wèi)ayoutSubViews
layoutIfNeeded 立即執(zhí)行l(wèi)ayoutSubViews
setNeedDisplay 下一次loop執(zhí)行draw

view的改變會調(diào)用哪些方法

  • 改變frame.origin不會掉用layoutSubviews
  • 改變frame.size會使 superVIewlayoutSubviews調(diào)用
  • 改變bounds.originbounds.size都會調(diào)用superView和自己viewlayoutSubviews方法

參考鏈接:https://github.com/ming1016/study/wiki/深入剖析Auto-Layout,分析iOS各版本新增特性

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闰蛔,一起剝皮案震驚了整個濱河市痕钢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌序六,老刑警劉巖任连,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異例诀,居然都是意外死亡随抠,警方通過查閱死者的電腦和手機裁着,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拱她,“玉大人二驰,你說我怎么就攤上這事”樱” “怎么了桶雀?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長唬复。 經(jīng)常有香客問我矗积,道長,這世上最難降的妖魔是什么敞咧? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任棘捣,我火速辦了婚禮,結(jié)果婚禮上休建,老公的妹妹穿的比我還像新娘乍恐。我一直安慰自己,他們只是感情好测砂,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布禁熏。 她就那樣靜靜地躺著,像睡著了一般邑彪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胧华,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天寄症,我揣著相機與錄音,去河邊找鬼矩动。 笑死有巧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悲没。 我是一名探鬼主播篮迎,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼示姿!你這毒婦竟也來了甜橱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤栈戳,失蹤者是張志新(化名)和其女友劉穎岂傲,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體子檀,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡镊掖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年乃戈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亩进。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡症虑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出归薛,到底是詐尸還是另有隱情谍憔,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布苟翻,位于F島的核電站韵卤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏崇猫。R本人自食惡果不足惜沈条,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诅炉。 院中可真熱鬧蜡歹,春花似錦、人聲如沸涕烧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽议纯。三九已至父款,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞻凤,已是汗流浹背憨攒。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阀参,地道東北人肝集。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像蛛壳,于是被迫代替她去往敵國和親杏瞻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容