简单记录 自学非博客:
我们的View在Init的时候是做了以下顺序的操作的
1.约束
2.layout
3.display
调用setNeedsLayout()<异步方法> 在UIKit Main Run Loop循环中,的下一个渲染周期调用layoutSubviews()
调用layoutIfNeeded()<同步方法> 强制系统在当前的渲染周期内进行从此视图到其子视图的渲染
setNeedsLayout和layoutIfNeeded区别,比如,如果我改变约束,并且用一个动画持续2s,然后用setNeedsLayout发现并没有动画效果,为什么呢,因为他默认是在下一个渲染周期进行图像渲染,所以动画线程无法捕获其动作,所以没有动画渲染。 如果使用layoutIfNeeded在当前渲染周期重新渲染绘制,所以动画线程就能捕捉到此动作,然后进行动画渲染。
调用setNeedsDisplay() 重新绘制 -> draw(ract)
网友评论