CALayer - 2

上一篇章讲到出现死角的情况,该怎么解决

我们可以看到这个属性:

/* 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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值