iOS 给一个视图添加圆角的同时设置阴影

 

首先看效果图

需求:一个视图有圆角,又要有阴影,之前做过类似需求,这次又遇到了,便记录下来

供参考

一, 我们做圆角的时候,需要设置layer的maskToBounds 属性置为YES,这时候,如果 我们

   再设置该视图的阴影是没有效果的,因为maskToBounds 的时候,超出视图 范围的内容都会

切掉(展示不出来)

所以我们换种思路,就想到,我们能不能添加一个CAShapeLayer, 使用贝塞尔曲线绘制一个带圆角的Layer,然后给layer添加阴影,后来也确实是使用这种方案来实现的

下面我们来看实现的源代码

创建 CAShapeLayer.   

- (CAShapeLayer *)titleShadowLayer
{
    if (!_titleShadowLayer) {
        _titleShadowLayer = [[CAShapeLayer alloc] init];
        _titleShadowLayer.backgroundColor = CardBackGroundColor.CGColor;
        _titleShadowLayer.fillColor = CardBackGroundColor.CGColor;
        _titleShadowLayer.shadowColor = [UIColor colorWithRed:222/255.0 green:228/255.0 blue:230/255.0 alpha:1.0].CGColor;
        _titleShadowLayer.shadowOffset = CGSizeMake(0,2);
        _titleShadowLayer.shadowOpacity = 1;
        _titleShadowLayer.shadowRadius = 4;
    }
    return _titleShadowLayer;
}

 添加自视图和子layer,注意该layer要放在展示阴影视图的下面,避免遮盖住需要展示的视图

    [self.layer addSublayer:self.titleShadowLayer];
    [self addSubview:self.titleLabel];

设置Layer 的 贝塞尔曲线路径

    [self layoutIfNeeded];
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.titleLabel.frame byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(13.5 * rectScale(), 13.5 * rectScale())];
    self.titleShadowLayer.path = path.CGPath;

  这里有一点需要注意:         _titleShadowLayer.fillColor = CardBackGroundColor.CGColor; 这句 代码不能省略,否则我们的Layer 会展示

成全黑的背景色

那么为什么我们自己有创建了一个Layer,而不是用原来视图的Layer 使用贝塞尔曲线圆角呢,以为 视图的layer是CALayer类型的,没有path属性

而我们创建的是CAShapeLayer类型的,可以绘制贝塞尔曲线,

通过以上代码,我们就实现了设计稿里面需要的给一个视图添加圆角,并展示阴影

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值