參考鏈接layoutSubviews總結(jié) - BSPLover的專欄 - 博客頻道 - CSDN.NET
1.drawRect:方法
系統(tǒng)固定的方法。在view的內(nèi)容發(fā)生改變的時(shí)候調(diào)用此方法可以對(duì)view進(jìn)行重新繪制。不可以直接調(diào)用。通過setNeedDisplay 或者 setNeedsDisplay:方法可以調(diào)用該方法。
比較吃內(nèi)存
在此方法內(nèi)可以使用CoreGraphics對(duì)view進(jìn)行繪制的一些基本操作。
2.layoutsubviews方法
作用:調(diào)整子視圖的位置。(附:子視圖的添加最好不要寫在init方法中)
調(diào)用時(shí)機(jī):
a:直接調(diào)用setLayoutSubviews。
b:addSubview的時(shí)候。
c:當(dāng)view的frame發(fā)生改變的時(shí)候。
d:滑動(dòng)UIScrollView的時(shí)候。
e:旋轉(zhuǎn)Screen會(huì)觸發(fā)父UIView上的layoutSubviews事件。
f:改變一個(gè)UIView大小的時(shí)候也會(huì)觸發(fā)父UIView上的layoutSubviews事件。
如何手動(dòng)調(diào)用該方法?
通過setNeedsLayout或者layoutIfNeed方法。
-setNeedsLayout方法: 標(biāo)記為需要重新布局,異步調(diào)用layoutIfNeeded刷新布局,不立即刷新,但layoutSubviews一定會(huì)被調(diào)用
-layoutIfNeeded方法:如果,有需要刷新的標(biāo)記,立即調(diào)用layoutSubviews進(jìn)行布局(如果沒有標(biāo)記,不會(huì)調(diào)用layoutSubviews)
3.drawRect 和 layoutSubviews的區(qū)別?
前者是管理在視圖上繪制的內(nèi)容
后者是管理其子視圖的相對(duì)位置信息