CALayer

###简单介绍
在iOS中,一般你看得到的,点得着的都是View,比如一个按钮、一个文本输入框、或者图标,都是UIView,而CAlayer则是图层,他们最大的区别是UIView是可交互的,而CAlayer却是相反。

###CAlayer基本属性

常用属性 说明
cornerRadius 设置圆角
shadowOffset 设置阴影偏移量
shadowColor 设置阴影颜色
shadowOpacity 设置阴影透明度
shadowRadius 设置阴影半径
shadowPath 设置阴影路径
borderWidth 设置边框
borderColor 设置边框颜色
masksToBounds 子图层是否跟随主图层
transform 设置CATransform3D动画
position 用来设置CALayer在父层中的位置
zPosition 多个Layer时,数值大的会遮挡数值小的
anchorPoint 设置锚点
anchorPointZ 多个Layer时,数值小的会遮挡数值大的
bounds 参考UIView
frame 参考UIView
hidden 参考UIView
doubleSided 参考UIView
doubleSided 图层有双面
transform 解释
CATransform3DMakeAffineTransform(CGAffineTransform m) 设置2D变形
CATransform3DMakeRotation(angle, x, y, z) 设置3D旋转
CATransform3DMakeScale(x, y, z) 设置3D伸缩
CATransform3DMakeTranslation(x, y, z) 设置3D平移

基中position和anchorPoint,是CAlayer里面非常重要的两个属性,而且也比较容易误解,特别是锚点,position对于设置了frame的layer,他几乎等价于UIView里面的中点,而锚点,默认值为{0.5,0.5},决定着CALayer的某个点最终和position所在的点重合决定图层的位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) CALayer *layer;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.view.layer addSublayer:self.layer];
self.layer.anchorPoint = CGPointMake(0, 0);
//self.layer.anchorPoint = CGPointMake(0.5, 0.5);
//self.layer.anchorPoint = CGPointMake(1, 1);
}
- (CALayer *)layer {
if (_layer == nil)
{
_layer = [[CALayer alloc]init];
_layer.backgroundColor = [UIColor blueColor].CGColor;
_layer.frame = CGRectMake(100, 100, 100, 100);
}
return _layer;
}

描点用例图
描点用例图
描点用例图
描点用例图

比方说用上面的代码创建了一个图层,则position的值为(50,50),为上图绿点表示,我们通过self.layer.anchorPoint改锚点的值,看上面的图,将能很好的理解,你不需要想太多,只要想着,锚点最终会和position点重合,套用上面图的做法,就可以了。

###属性设置注意事项

属性设置时,存在部分属性冲突问题,如设置了阴影,如果再设置masksToBounds属性为YES,则会发现阴影没有设置成功。