- setNeedsDisplay 和 setNeedsLayout
两个方法都是异步执行,setNeedsDisplay会自动调用drawRect方法,从而会从中得到当前上下文UIGraphicsGetCurrentContext进行绘图。而setNeedsLayout会默认调用layoutSubViews方法,进而处理子视图中的一些数据。综上所述,setNeedsDisplay方便绘图,setNeedsLayout方便处理数据。 - setNeedsLayout 和 layoutIfNeeded
调用过setNeedsLayout方法后并不会立刻去执行layoutSubViews方法,而是等drawing cycle循环到达该节点时才会调用layoutSubViews方法进行布局。而如果对象布局设置发生改变后调用layoutIfNeeded方法会立刻重新布局即layoutSubviews方法会立刻被触发。 - layoutSubviews方法被调用的情况:
a.直接调用setNeedsLayout方法时(注:已增加到父视图上).
b.被增加到父视图上时addSubview(注:size不能为0) .
c.给当前视图增加addSubview子视图时无论子视图的size是否为0,layoutSubviews都会被调用
d.view的size发生改变的时候.
e.滑动UIScrollView时.
f.旋转Screen时会触发父控件上的layoutSubviews事件. - drawRect方法被调用的情况:
a.直接调用setNeedsDisplay或者setNeedsDisplayInRect:方法时.
b.初始化时设置了视图大小时.
c.调用过sizeToFit方法后.
d.通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时.
本文解析了UIKit中setNeedsDisplay与setNeedsLayout方法的区别,前者用于触发绘图,自动调用drawRect方法;后者用于处理数据,调用layoutSubViews进行布局。详细介绍了layoutSubviews与drawRect的调用条件,及layoutIfNeeded方法的即时布局效果。

993

被折叠的 条评论
为什么被折叠?



