CALayer - 2
2016-01-01 13:29
483 查看
上一篇章讲到出现死角的情况,该怎么解决
我们可以看到这个属性:
/* When true an implicit mask matching the layer bounds is applied to
* the layer (including the effects of the `cornerRadius' property). If
* both `mask' and `masksToBounds' are non-nil the two masks are
* multiplied to get the actual mask values. Defaults to NO.
* Animatable. */
@property BOOL masksToBounds;
解释得非常清楚,会确切地适配到层的bounds并且应用到图层上,包括cornerRadius属性的变化。其实说白了就是把超出主图层的部分裁减掉。
添加一句代码即可:
self.vview.layer.masksToBounds = YES;
我们同时可以看到另外一个和这个属性可能有点关系的属性:
@property(nullable, strong) CALayer *mask;
这个就是CALayer的遮罩属性,我们会在以后在进行学习,这个可以实现很多CALayer有趣的动画或者是效果的哦
那有没有别的解决方法呢,实际中当然很多,例如图片是背景为透明的底图,还能用这个方法将内容缩小显示:
subLayer.frame = CGRectInset(self.bounds, 12, 12);
我们继续来看看图层的阴影:
//设置阴影
self.vview.layer.shadowColor = [UIColor blackColor].CGColor;
self.vview.layer.shadowOffset = CGSizeMake(15, 5);
self.vview.layer.shadowOpacity = 0.6;
这么炫酷,我们如果这样设置,就会知道其中的原理了:
UIView* vvview = [[UIView alloc] init];
[vvview setFrame:CGRectMake(50, 50, 150, 150)];
vvview.layer.borderColor = [UIColor blackColor].CGColor;
vvview.layer.borderWidth = 1;
//设置阴影
vvview.layer.shadowColor = [UIColor blackColor].CGColor;
vvview.layer.shadowOffset = CGSizeMake(15, 5);
vvview.layer.shadowOpacity = 0.6;
[self.view addSubview:vvview];
效果:
原来便宜度和透明Rect是这样来实现的,但是如果将视图的颜色和边框等设置成透明色clearColor,你会发现,阴影也随着消失了,所以要保证视图是有显示内容的
那如果我们同时要设置图片和圆角,使用了MaskToBounds裁减的方法后呢?会发现超出bounds的部分全部被裁减了,即阴影部分效果消失了。
该怎么解决? 百度一下很多解决方法,最常用的就是写一个有阴影的底层视图,然后将设置好的圆角视图添加上去,即将这两者分离即可。
UIView* vvview = [[UIView alloc] init];
[vvview setFrame:CGRectMake(50, 50, 150, 150)];
//设置阴影
vvview.layer.shadowColor = [UIColor blackColor].CGColor;
vvview.layer.shadowOffset = CGSizeMake(15, 5);
vvview.layer.shadowOpacity = 0.6;
[self.view addSubview:vvview];
//带阴影的底层添加上圆角图形
[vvview addSubview:self.vview];
注意应该是有阴影的添加圆角,如果圆角添加有阴影的随时又被裁减掉啦!
参考:
http://blog.sina.com.cn/s/blog_a573f7990102ux0j.html http://stackoverflow.com/questions/26060392/setting-calayer-masktobounds-causing-layer-to-disappear
我们可以看到这个属性:
/* When true an implicit mask matching the layer bounds is applied to
* the layer (including the effects of the `cornerRadius' property). If
* both `mask' and `masksToBounds' are non-nil the two masks are
* multiplied to get the actual mask values. Defaults to NO.
* Animatable. */
@property BOOL masksToBounds;
解释得非常清楚,会确切地适配到层的bounds并且应用到图层上,包括cornerRadius属性的变化。其实说白了就是把超出主图层的部分裁减掉。
添加一句代码即可:
self.vview.layer.masksToBounds = YES;
我们同时可以看到另外一个和这个属性可能有点关系的属性:
@property(nullable, strong) CALayer *mask;
这个就是CALayer的遮罩属性,我们会在以后在进行学习,这个可以实现很多CALayer有趣的动画或者是效果的哦
那有没有别的解决方法呢,实际中当然很多,例如图片是背景为透明的底图,还能用这个方法将内容缩小显示:
subLayer.frame = CGRectInset(self.bounds, 12, 12);
我们继续来看看图层的阴影:
//设置阴影
self.vview.layer.shadowColor = [UIColor blackColor].CGColor;
self.vview.layer.shadowOffset = CGSizeMake(15, 5);
self.vview.layer.shadowOpacity = 0.6;
这么炫酷,我们如果这样设置,就会知道其中的原理了:
UIView* vvview = [[UIView alloc] init];
[vvview setFrame:CGRectMake(50, 50, 150, 150)];
vvview.layer.borderColor = [UIColor blackColor].CGColor;
vvview.layer.borderWidth = 1;
//设置阴影
vvview.layer.shadowColor = [UIColor blackColor].CGColor;
vvview.layer.shadowOffset = CGSizeMake(15, 5);
vvview.layer.shadowOpacity = 0.6;
[self.view addSubview:vvview];
效果:
原来便宜度和透明Rect是这样来实现的,但是如果将视图的颜色和边框等设置成透明色clearColor,你会发现,阴影也随着消失了,所以要保证视图是有显示内容的
那如果我们同时要设置图片和圆角,使用了MaskToBounds裁减的方法后呢?会发现超出bounds的部分全部被裁减了,即阴影部分效果消失了。
该怎么解决? 百度一下很多解决方法,最常用的就是写一个有阴影的底层视图,然后将设置好的圆角视图添加上去,即将这两者分离即可。
UIView* vvview = [[UIView alloc] init];
[vvview setFrame:CGRectMake(50, 50, 150, 150)];
//设置阴影
vvview.layer.shadowColor = [UIColor blackColor].CGColor;
vvview.layer.shadowOffset = CGSizeMake(15, 5);
vvview.layer.shadowOpacity = 0.6;
[self.view addSubview:vvview];
//带阴影的底层添加上圆角图形
[vvview addSubview:self.vview];
注意应该是有阴影的添加圆角,如果圆角添加有阴影的随时又被裁减掉啦!
参考:
http://blog.sina.com.cn/s/blog_a573f7990102ux0j.html http://stackoverflow.com/questions/26060392/setting-calayer-masktobounds-causing-layer-to-disappear
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器