-
Notifications
You must be signed in to change notification settings - Fork 0
/
CALayer
83 lines (68 loc) · 2.75 KB
/
CALayer
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
CALayer
CALayer是定义在QuartzCore框架中的[Core Animation];
CGImageRef , CGColorRef两种数据类型定义在CoreGraphics框架中
UIColor,UIImage是定义在UIKit框架中
QuartzCore框架和CoreGraphics框架是可以跨平台使用的,ios,Mac Os上都能用,UIKit只能在ios上使用
为了保证可移植性,QuartzCore不能使用UIImage,UIColor,只能使用CGImageRef,CGColorRef;
一、
自定义图层
CALayer *layer = [CALayer layer];
//尺寸
layer.bounds = CGRectMake(0,0,200,200);
//位置
layer.position = CGPointMake(100,100);
//颜色
layer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer addSubView:layer];
layer.contents = (id)[UIImage imageNamed:...].CGImage;
二、
UIView 调用 drawRect
layer ShadowOpacity
ShadowColor
ShadowRadius
cornerRadius
borderColor
borderWidth
//如果设置图片符合layer样式
_imageView.layer.maskToBounds = YES;
三、
0________________x
|\ \
| \ | \ _imageView.layer.transform = CATransform3DMakeRotation(M_PI,0,0,1);
| \ | \
| \ | \
| \ | \
|_____\z______________\
y\ | |
\ | |
\ | |
\ | |
\|_______________|
//变换时可添加动画
[UIView animatedWithDuration:nil animation:...];
//平移
_imageView.layer.transform = CATransform3DMakeScale(0.5,0.5,1);
_imageView.layer.transform = CATransform3DMakeTransLation(200,200,0);//会清空,从0开始
KVC:[_imageView.layer setValue:id forKeyPath:@"transform"];//此方式存在bug
// 对象 将...赋值给....
[_imageView.layer setValue:@M_PI forKeyPath:@"transform.rotation"];
//二维旋转
[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.5,0.5,1)];
四、
1、UIView(交互用)&CALayer
UIView能处理事件,CALayer不能处理用户触摸事件
2、CALayer两个重要属性
@property CGPoint position;
@property CGPoint anchorPoint;//定位点,x,y取值为0~1,默认为(0.5,0.5),说明锚点在Layer中点
五、隐式动画
每一个UIView内部都默认关联一个CALayer,称为Root Layer(根层)
所有的非Root Layer,就是手动创建的CALayer对象,都存在隐式动画
当对非Root Layer部分属性进行修改时,默认会产生一些动画
而这些属性称为Animatable Properties(可动画属性)
常见Animatable Properties:
bounds, backgroundColor, position
取消隐式动画
[CATransaction begin]//开启事务
[CATransaction setDisableAction:YES];//取消动画
layer.position = CGPointMake(100,100);
[CATransaction commit];//提交事务