聊聊UIView的setNeedsDisplay和setNeedsLayout方法
1.这两个方法都是异步执行的。
setNeedsDisplay: 调用setNeedsDisplay方法会自动调动drawRect! 并不会调用init方法!
setNeedsLayout: 调用setNeedsLayout 方法会调用layoutSubViews!
layoutSubviews方法在什么时候被调用呢? 1.首先init舒适化方法不会调用layoutSubviews! 而addSubview 方法则会调用layoutSubviews。 这就是为什么说layoutSubviews方法在空间都初始化渲染之后才会执行的原因,通常也会在这里设置控件的frame。
2.设置了view的frame方法,会调用layoutSubviews(注意:这里的frame 必须要发生了变化)。
看下这段代码 UIView *v = [[UIView alloc] initWithFrame : CGRectMake(0,0,100,100)]; [self.view addSubview : v]; v中的layoutSubviews 会被执行2次。 addSubview 一次,initWithFrame 设置frame一次。
3、滚动一个UIScrollView会触发layoutSubviews。
4、旋转Screen会触发父UIView上的layoutSubviews事件。
5、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
6、直接调用setLayoutSubviews
对了,drawRect方法一定要慎用!drawRect号称内存恶魔。

浙公网安备 33010602011771号