UIView Layout

2017-06-16  本文已影响27人  fd1a9ea4a20e

简单记录 自学非博客:
我们的View在Init的时候是做了以下顺序的操作的

1.约束
2.layout
3.display

调用setNeedsLayout()<异步方法> 在UIKit Main Run Loop循环中,的下一个渲染周期调用layoutSubviews()

调用layoutIfNeeded()<同步方法> 强制系统在当前的渲染周期内进行从此视图到其子视图的渲染

setNeedsLayout和layoutIfNeeded区别,比如,如果我改变约束,并且用一个动画持续2s,然后用setNeedsLayout发现并没有动画效果,为什么呢,因为他默认是在下一个渲染周期进行图像渲染,所以动画线程无法捕获其动作,所以没有动画渲染。 如果使用layoutIfNeeded在当前渲染周期重新渲染绘制,所以动画线程就能捕捉到此动作,然后进行动画渲染。

调用setNeedsDisplay() 重新绘制 -> draw(ract)

上一篇 下一篇

猜你喜欢

热点阅读