用來畫圖,
1.這個方法會在intiWithRect時候調(diào)用。如果在UIView初始化時沒有設(shè)置rect大小,將直接導(dǎo)致drawRect不被自動調(diào)用。
2、該方法在調(diào)用sizeToFit后被調(diào)用,所以可以先調(diào)用sizeToFit計算出size。然后系統(tǒng)自動調(diào)用drawRect:方法。
3、通過設(shè)置contentMode屬性值為UIViewContentModeRedraw。那么將在每次設(shè)置或更改frame的時候自動調(diào)用drawRect:。
4、直接調(diào)用setNeedsDisplay,或者setNeedsDisplayInRect:觸發(fā)drawRect:
LayoutSubview
- 使用addSubview添加時會調(diào)用layoutSubView
- 在被添加到父視圖 或添加子視圖(如果此視圖沒有frame或子視圖沒有frame則不會調(diào)用)
- 設(shè)置父視圖或子視圖Size時會調(diào)用
- 自身的size改變
- 滾動scrollview 的時候也會調(diào)用
- 設(shè)備的orientation(方向)改變時,涉及改變的UIViewControl 的root view
(此時所有的控件被重新布局,相當(dāng)于A的frame被改變 那么會調(diào)用layoutSubview 而且如果控件有子視圖的話會再調(diào)用一次layoutSubview)- Resizing(拉伸) 一個 控件 也會調(diào)用它的父控件的layoutSubview
- 調(diào)用setNeedsLayout時
還有一個重要的點,layoutSubview不是在調(diào)用完比如addSubview等方法之后就馬上調(diào)用,而是會在調(diào)用addSubview方法所在的作用域結(jié)束之后之后才調(diào)用,因此即使你在同一個方法中既使用了addSubViews又更改了frame,也是只會調(diào)用一次layoutSubview而已
如果要立即刷新,要先調(diào)用[view setNeedsLayout],把標(biāo)記設(shè)為需要布局,然后馬上調(diào)用[view layoutIfNeeded],實現(xiàn)布局
鏈接:http://www.itdecent.cn/p/db23c036998
-(BOOL)needsUpdateConstraints
使用此返回值去決定是否需要 調(diào)用updateConstraints作為正常布局過程的一部分。?
- (void)setNeedsUpdateConstraints
當(dāng)一個自定義view的某個屬性發(fā)生改變,并且可能影響到constraint時,需要調(diào)用此方法去標(biāo)記constraints需要在未來的某個點更新,系統(tǒng)然后調(diào)用updateConstraints.
- (void)updateConstraints
更新約束,自定義view應(yīng)該重寫此方法在其中建立constraints. 注意:要在實現(xiàn)在最后調(diào)用[super updateConstraints]?
- (void)updateConstraintsIfNeeded
立即觸發(fā)約束更新,自動更新布局。