IOS setNeedsDisplay setNeedsLayout注意

署名:  那年高中今日还

           IOS setNeedsDisplay, setNeedsLayout

UIView的setNeedsDisplay 和 setNeedsLayout方法.这两个方法都是异步执行的。

1.   Display为了展示,系统为自动调用drawRect方法.

2.   Layout 为了布局, 系统为自动调用 layoutSubviews方法.

 

 

关于drawRect方法:

  1. 在drawRect方法中才能拿到 “ 可用的画图Context”,开始在画布上画画并且展示在 view上;

 2.  drawRect调用情形: (view要被展示之前)

2.1 viewDidLoad方法之后会被调用 (需要画view中所有subviews)

2.2sizeToFit 方法后被调用 (sizeToFit 为要求系统自动布局方法 , 需要重新画 subviews)

2.3contentMode属性值 被设置为Redraw模式时,比较少用

2.4 直接调用setNeedsDisplay方法时,会调用drawRect;

之所以要重载该方法,是需要在drawRect中进行画图.

DrawRect方法画图注意:

1.   如果是用UIView绘图,只能在drawRect方法中获取相应的contextRef对象并且绘图。在view的其他地方获取的contextRef对象是没有作用的;

2.   如果使用Layer画图,智能在 drawInContext:中绘制;才能拿到有用的绘图对象;

 

关于layoutSubviews被调用情形 (subview,frame改变时)

1.   viewinit时不会被调用

2.   addSubview(增加子view时)会被调用

3.   设置view frame时会被触发;

4.   滚动scrollview时会被触发

5.   旋转屏幕会触发

6.   *****改变subview的大小时,会触发superView的layoutSubvuews方法;

7.   ***** 调用setNeedsLayout方法时候触发

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值