聊聊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号称内存恶魔。

posted @ 2016-05-19 11:31  hb的微博  阅读(164)  评论(0)    收藏  举报