1 3.代表演示图层常用属性,View的Layer
2 3.1 阴影
3 设置阴影不透明Opacity View的透明度 alpha
4 _RedView.layer.shadowOpacity = 1;
5 运行得出结论: 默认图层是有阴影的, 只不过,是透明的
6 设置阴影的模糊程度
7 _RedView.layer.shadowRadius =10;
8 设置阴影的颜色,把UIKit转换成CoreGraphics框架,用.CG开头
9 _RedView.layer.shadowColor = [UIColor blueColor].CGColor;
10
11 3.2 图层的圆角半径
12 图层的圆角半径,圆角半径为宽度的一半, 就是一个圆
13 _RedView.layer.cornerRadius = 50;
14
15 3.3 设置图层边框
16 设置边框必须得有颜色,和宽度
17 //设置图层边框,在图层中使用CoreGraphics的CGColorRef
18 _RedView.layer.borderColor = [UIColor whiteColor].CGColor;
19 _RedView.layer.borderWidth = 2;
20
21 4.UIImageView的Layer
22 在StoryBoard中拖一个UIImageView, 设置尺寸100 * 100;拖线
23
24 4.1设置图片的圆角半径
25 _imageView.layer.cornerRadius = 50;
26 运行发现没有效果
27 原因:一个View都有一个根层,用Layer属性修改的都是根层的Layer,除了根层以外, 还有一个内容层
28 UIImageView当中的Image是添加到内容层上面的.所以没有效果
29
30 注意,图片不是加到子层上面,是添加到内容层上面,验证
31 NSLog(@"%@",_imageView.layer.sublayers); (null)
32 NSLog(@"%@",_imageView.layer.contents); <CGImage 0x7fb439811510>
33
34 解决办法:对图片做一次裁剪
35
36 裁剪,超出裁剪区域的部分全部裁剪掉.
37 默认的裁剪区域和根层是一样的.
38
39 View的层中还有一个裁剪区域层 mask层,这个层专门用来做裁剪的.
40 默认的区域和根层是一样的,根层多大, 它就是多大,它会用Mask层去裁剪图片,超出区域的,会裁剪掉
41
42 简单理解:超出主导的部分都会被裁剪掉
43 _imageView.layer.masksToBounds = YES;
44
45 虽然设置控件可以设置圆形头像,但是有条件,必须是正方形
46 4.2 设置图形边框
47 这里改的是控件,以前是生成的图片
48 _imageView.layer.borderWidth = 1;
49 _imageView.layer.borderColor = [UIColor whiteColor].CGColor;
50
51
52
53 5.利用图层做3D效果
54
55 什么时候有3D效果?旋转的时候才有3D效果 做旋转,就是形变,UiView有形变,图层也有形变
56
57 5.1 直接修改属性 x,y,z 分别代表x轴,y轴,Z轴旋转
58 _imageView.layer.transform = CATransform3DMakeRotation(M_PI, 1, 0, 0);
59
60 5.2 利用KVC
61 修改属性transform的值为CATransform3DMakeRotation(M_PI, 1, 0, 0)
62 CATransform3DMakeRotation(M_PI, 1, 0, 0)为结构体类型
63 Value要一个对象类型
64 把结构体转换成对象
65 NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 0, 0)];
66 [_imageView.layer setValue:value forKey:@"transform"];
67
68 注意:Value的类型 必须得要跟属性的值的类型匹配.
69
70
71 什么时候用KVC?
72 做旋转的时候,最好不要使用KVC.
73 做一些快速缩放的时候和一些二维的旋转
74 比如:
75 这样写它会快速的把宽高都给缩放成0.5,就不用再写很长的一串
76 [_imageView.layer setValue:@0.5 forKeyPath:@"transform.scale"];
77 [_imageView.layer setValue:@M_PI forKeyPath:@"transform.rotation"];
78
79