您的位置:首页 > 移动开发 > IOS开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS CALayer Drawing