用来画图,
1.这个方法会在intiWithRect时候调用。如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。
2、该方法在调用sizeToFit后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法。
3、通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。
4、直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:
LayoutSubview
- 使用addSubview添加时会调用layoutSubView
- 在被添加到父视图 或添加子视图(如果此视图没有frame或子视图没有frame则不会调用)
- 设置父视图或子视图Size时会调用
- 自身的size改变
- 滚动scrollview 的时候也会调用
- 设备的orientation(方向)改变时,涉及改变的UIViewControl 的root view
(此时所有的控件被重新布局,相当于A的frame被改变 那么会调用layoutSubview 而且如果控件有子视图的话会再调用一次layoutSubview)- Resizing(拉伸) 一个 控件 也会调用它的父控件的layoutSubview
- 调用setNeedsLayout时
还有一个重要的点,layoutSubview不是在调用完比如addSubview等方法之后就马上调用,而是会在调用addSubview方法所在的作用域结束之后之后才调用,因此即使你在同一个方法中既使用了addSubViews又更改了frame,也是只会调用一次layoutSubview而已
如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view layoutIfNeeded],实现布局
鏈接:http://www.jianshu.com/p/db23c036998
-(BOOL)needsUpdateConstraints
使用此返回值去决定是否需要 调用updateConstraints作为正常布局过程的一部分。
- (void)setNeedsUpdateConstraints
当一个自定义view的某个属性发生改变,并且可能影响到constraint时,需要调用此方法去标记constraints需要在未来的某个点更新,系统然后调用updateConstraints.
- (void)updateConstraints
更新约束,自定义view应该重写此方法在其中建立constraints. 注意:要在实现在最后调用[super updateConstraints]
- (void)updateConstraintsIfNeeded
立即触发约束更新,自动更新布局。