calayer的基本操作

Posted on 2016-07-06 22:58  柠檬片  阅读(95)  评论(0)    收藏  举报
 1 - (void)ViewLayer{
 2     //阴影
 3     //设置阴影不透明Opacity View的透明度 alpha
 4     //默认图层是有阴影的, 只不过,是透明的
 5     _RedView.layer.shadowOpacity = 1;
 6     //设置阴影的圆角
 7     _RedView.layer.shadowRadius  =10;
 8     //设置阴影的颜色,把UIKit转换成CoreGraphics框架,用.CG开头
 9     _RedView.layer.shadowColor = [UIColor blueColor].CGColor;
10     
11     //图层的圆角半径,圆角半径为宽度的一半, 就是一个圆
12     _RedView.layer.cornerRadius = 50;
13     
14     //设置图层边框颜色(需要和borderwidth一起使用),在图层中使用CoreGraphics的CGColorRef
15     _RedView.layer.borderColor = [UIColor whiteColor].CGColor;
16     _RedView.layer.borderWidth = 2;
17     
18    
19 
20 }
View的Layer
 1 - (void)imageViewLayer{
 2   //可以用此方式设置带圆形边框的图片
 3     //设置图片的圆角半径
 4     _imageView.layer.cornerRadius = 50;
 5     //裁剪,超出裁剪区域的部分全部裁剪掉
 6     _imageView.layer.masksToBounds = YES;
 7     
 8     //设置图形边框
 9     _imageView.layer.borderWidth = 2;
10     _imageView.layer.borderColor = [UIColor whiteColor].CGColor;
11 }
iamgeView的layer

 

 1 - (void)touchesBegan:(nonnull NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{
 2     
 3     
 4     [UIView animateWithDuration:1 animations:^{
 5     //1.直接修改layer的transforam的值
 6 //        _imageView.layer.transform = CATransform3DMakeRotation(M_PI, 1, 1, 0);
 7 //          _imageView.layer.transform = CATransform3DMakeTranslation(100,50,1);
 8 //           _imageView.layer.transform = CATransform3DMakeScale(0.5,0.5,1);
 9         
10         
11     //2.利用KVC修改transform的值
12         //修改属性transform的值为CATransform3DMakeRotation(M_PI, 1, 0, 0)
13 //        CATransform3DMakeRotation(M_PI, 1, 0, 0)为结构体类型
14 //        Value要一个对象类型
15 //        把结构体转换成对象
16 //
17       NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 0, 0)];
18         [_imageView.layer setValue:@0.5 forKeyPath:@"transform.scale"];
19         
20         
21     }];
22     
23     
24     
25     
26 }
图片的3D效果操作

 

 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  
其他了解