iOS Core Animation:Advanced Techniques 笔记

1、每个UIView都有一个CALayer类型的属性layer

2、iOS有2种平行体系UIView和CALayer的原因是:区分开责任,同事避免重复的代码。例如iOS和Mac OS X

3、在UIView中没有暴露出CALayer的功能有:

①、阴影、圆角、有颜色的边框。
②、3D旋转和位置变换
③、非矩形边框
④、内容蒙板
⑤、多步骤、非线性的动画

4、对应UIView中的contentMode,CALayer中的是contentsGravity。

5、如果不需要后备图片,就不需要浪费内存和cpu时间去生成它。所以苹果建议如果不打算做任何普通的绘制,就不要在类中留下空的drawRect方法。

6、CALayer没有响应链的概念,所以它不能用来处理触摸事件、手势事件。但是,它有2个方法来帮助实现触摸事件,分别是containsPoint:和hitTest

当调用hitTest方法时,测试的顺序是严格按照layer树中layer的顺序。zPosition属性可以用来影响layer层在屏幕上的显示顺序,但不会影响触摸事件的处理顺序。

7、当属性在动画block外面变更的时候,UIView通过对属性行为返回nil禁用隐式动画。

UIView关联图层禁用了隐式动画。唯一在这个图层进行动画的方法是运用UIView动画方法(而不是依赖CATransaction),继承UIView,覆盖-actionForLayer:-forKey:方法,或者创建一个显式动画。

对于单独图层,可以通过实现-actionForLayer:-forKey:图层代理方法,或者提供一个actions词典。