绘图与动画学习笔记(三)

1、 UIView的setNeedsDisplaysetNeedsLayout方法的区别

a) 首先,两个方法都是异步执行的,而setNeedsDisplay会自动调用drawRect方法,而setNeedsLayout会默认调用layoutSubviews就可以处理子视图中的一些数据

b) layoutSubviews在以下情况下会被调用:

i. Init初始化的时候不会触发layoutSubview

ii. addSubview会触发layoutSubviews

iii. 设置viewFrame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化

iv. 滚动一个UIScrollView会触发

v. 旋转Screen会触发夫UIView上的

vi. 改变一个Uiview大小的时候会触发父UIView上的layoutSubviews

vii. 直接调用setNeedsLayout

c) DrawRect在以下情况下会被调用

i. 如果在初始化时没有设置rect的大小,将直接导致drawRect不会被调用

ii. 该方法在调用sizeToFit后被调用,所以可以先调用sizeToFit计算出size,然后系统自动调用drawRect:方法

iii. 直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0

iv. 通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次

设置或更改frame的时候自动调用drawRect

 

2、 drawRect方法使用注意

a) 若使用UIView绘图,只能在drawRect:方法中获取相应的contextRef并绘图。如果在其他方法中获取将获取到一个invalidateref并且不能用于画图。DrawRect:方法不能手动显示调用,必须通过调用setNeedsDisplay或者setNeedsDisplayInRect,让系统自动调用该方法

b) 若使用calayer绘图,只能在drawInContext:中绘制,或者在delegate的相应方法绘制,同样也是调用setNeedsDisplay等间接调用以上方法

c) 若要实时画图,不能使用gestureRecognizer,只能使用touchbegan等方法来调用setNeedsDisplay实时刷新屏幕

3、 图层是绘图与动画的基础

主要的图层被认为是模型对象,因为它们主要是用于管理数据。此概念务必记住,因为它影响到动画的行为。

4、 基于图层的绘图模型

对基于视图的绘图,对视图的改变经常会触发调用视图的drawRect:方法以重绘视图内容。但是此种方式的代价相对较高,因为它是CPU在主线程上的操作Core Animation通过尽可能的使用图形硬件操纵缓存后的位图来避免了这种开销,从而完成相同或相似的效果。

虽然Core Animation尽可能的使用缓存后的内容,但也必须提供初始内容并不时地更新它。

 

5、 图层对象定义了自己的几何结构

与视图类似,一个图层有一个framebound属性,你可以使用这两个属性来定位图层和它的内容。图层也有一些视图所没有的属性,比如anchor属性,任何变换操作都是围绕该点运转的(可以理解为一个按在图层上的图钉)。图层的某些几何概念的指定方式与视图信息的指定方式也有不同。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值