setNeedDisplay,layoutSubviews,layoutIfNeeded,setNeedsLayout

在项目中看到 setNeedDisplay 这个方法的使用,从而想起了其他 UIView 的布局的其他方法。从而记录下。

在工程中是在绘制手势功能的 View 中看到可 setNeedDisplay 方法。查看资料了解到,setNeedDisplay 是异步执行的。同时调用这个方法会自动执行 drawRect 方法,调用 drawRect 方法就可以使用 UIBezierPath 和 CGContextRef 对象来进行一系列操作了。在工程中就是在 drawRect 中进行手动滑动画线的功能的实现。

layoutSubviews 也会在一些操作后会自动调用。

1.addSubview 会触发

2.设置 view 的 frame 会触发,重新设置的 frame 和原本的值发生变化

3.滚动一个 UIScrollView 会触发

4.横竖屏切换时,会触发父UIView 上的 layoutSubviews

layuotIfNeed 也是异步执行的, 这个方法经常会用,就是根据数据来更新 View 的 frame,这时就需要调用次方法来手动刷新 View 的布局。调用 layoutIfNeed 强制立即刷新 layout。

有时当你在改变一个 View 的某个约束后,在 [UIView animateWithDuration:] 方法中调用 layoutIfNeed 不管是哪一个 View 的约束改变了它都会以动画的形式过度到重新约束的位置。改变了某个 View 的约束,但不想以动画的形式则在动画方法之前调用该方法。

setNeedsLayout 是标记某个 View 需要更新 layout ,不会立即更新。

参考链接:

http://www.cnblogs.com/ygm900/p/3652890.html

http://www.jianshu.com/p/eb2c4bb4e3f1

你可能感兴趣的:(setNeedDisplay,layoutSubviews,layoutIfNeeded,setNeedsLayout)