
此方法调用条件:
(1)初始化不会触发此方法,但是如果设置了不为CGRectZero的frame时,就会触发
(2)addSubview方法会触发
(3)设置view的frame时会触发(frame前后发生了变化时)
(4)滚动UIScrollView时会触发
(5)旋转屏幕会触发父视图的layoutSubviews方法
(6)改变一个视图大小时会触发
(7)setNeedsLayout方法,标记为需要重新布局,异步调用layoutIfNeeded刷新布局,不立即刷新,但layoutSubviews一定会被调用
(8)layoutIfNeeded方法:如果,有需要刷新的标记,立即调用layoutSubviews进行布局(如果没有标记,不会调用layoutSubviews,
通常与setNeedsLayout方法一起使用)
备注:如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view layoutIfNeeded],实现布局
备注:在视图第一次显示之前,标记总是“需要刷新”的,可以直接调用[view
layoutIfNeeded]

此方法调用条件:
(1)使用setNeedsDisplay方法:标记为需要重绘,异步调用drawRect
(2)setNeedsDisplayInRect:(CGRect)invalidRect方法:标记为需要局部重绘

(1)layoutSubviews方法调用先于drawRect
(2)setNeedsLayout在receiver标上一个需要被重新布局的标记,在系统runloop的下一个周期自动调用layoutSubviews
(3)layoutIfNeeded遍历的不是superview链,应该是subviews链
(4)setNeedDisplay在receiver标上一个需被重新绘图的标记,在下一个draw周期自动重绘,iphone
device的刷新频率是60hz,也就是1/60秒后重绘