概要:图层(CALayer)是动画发生的场所,包括UIView动画都发生在图层中。
视图和图层的异同:
图层的很多方面和视图十分相同,它有位置、大小、变换和内容等属性。我们可以自定义图层,重写绘制方法,从而实现自己绘制图层的目的,图层也有层次关系,有自己的父图层和子图层。区别是视图是重量级对象,它负责绘制和事件响应,图层负责绘制,事实上视图依赖于图层实现绘制处理。
一.图层的坐标系
二.图层的几何
三.图层的几何变换
四.图层的操作:
图层有一个图层树,既然是树,就允许添加、插入、删除和替换相应的图层。
- (void)addSublayer:(CALayer *)layer;
- (void)insertSublayer:(CALayer *)layer atIndex:(unsigned)idx;
- (void)insertSublayer:(CALayer *)layer below:(CALayer *)sibling;
- (void)insertSublayer:(CALayer *)layer above:(CALayer *)sibling;
- (void)replaceSublayer:(CALayer *)layer with:(CALayer *)layer2;
- (void)removeFromSuperlayer;
图层的内容提供
五、为什么CALayer中使用CGColorRef和CGImageRef这2种数据类型,而不用UIColor和UIImage?
- 首先要知道:CALayer是定义在QuartzCore框架中的;CGImageRef、CGColorRef两种数据类型是定义在CoreGraphics框架中的;UIColor、UIImage是定义在UIKit框架中的
- 其次,QuartzCore框架和CoreGraphics框架是可以跨平台使用的,在iOS和Mac OS X上都能使用,但是UIKit只能在iOS中使用
- 因此,为了保证可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef.
- 不过很多情况下,可以通过UIKit对象的特定方法,得到CoreGraphics对象,比如UIImage的CGImage方法可以返回一个CGImageRef
六、UIView和CALayer的选择
细心的朋友不难发现,其实前面的2个效果不仅可以通过添加层来实现,还可以通过添加UIView来实现。比如,第1个红色的层可以用一个UIView来实现,第2个显示图片的层可以用一个UIImageView来实现。 既然CALayer和UIView都能实现相同的显示效果,那究竟该选择谁好呢?
- 其实,对比CALayer,UIView多了一个事件处理的功能。也就是说,CALayer不能处理用户的触摸事件,而UIView可以
- 所以,如果显示出来的东西需要跟用户进行交互的话,用UIView;如果不需要跟用户进行交互,用UIView或者CALayer都可以
- 当然,CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级
辨析:
一、position和anchorPoint
- position和anchorPoint属性都是CGPoint类型的
- position可以用来设置CALayer在父层中的位置,它是以父层的左上角为坐标原点(0, 0)
- anchorPoint称为”定位点”,它决定着CALayer身上的哪个点会在position属性所指的位置。它的x、y取值范围都是0~1,默认值为(0.5, 0.5)
二.可动画属性
bounds:用于设置CALayer的高度和宽度,修改这个属性可以产生缩放动画。
backgroundColor:用于设置CALayer的背景色,修改这个属性会产生背景色的渐变动画。
position:用于设置CALayer的位置,修改这个属性会产生平移动画。