layoutSubviews方法与drawRect方法的调用条件


微笑layoutSubviews方法

此方法调用条件:

(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]

微笑drawRect方法

此方法调用条件:

(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秒后重绘 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值