在项目中看到 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 ,不会立即更新。
参考链接:
网友评论