view 设置阴影+圆角

发布时间 2023-11-20 20:57:50作者: 循序渐进A

使用双层 view 实现:

     self.signInView.backgroundColor = [UIColor clearColor]; // 底层 view 设置阴影,背景要求透明
        [self.headerBgImgView addSubview:self.signInView];
        [self.signInView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.right.mas_equalTo(self);
            make.top.mas_equalTo(self.userHeadBtn.mas_top);
            make.width.mas_equalTo(AUTO_RATIO(74.f));
            make.height.mas_equalTo(AUTO_RATIO(28.f));
        }];
        [self layoutIfNeeded];
        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.signInView.bounds byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerTopLeft cornerRadii:CGSizeMake(AUTO_RATIO(14), AUTO_RATIO(14))];
        self.signInView.layer.shadowColor = [UIColor blackColor].CGColor;
        self.signInView.layer.shadowOffset = CGSizeMake(0, 2); // 阴影偏移量,默认(0,0)
        self.signInView.layer.shadowOpacity = 1;
        self.signInView.layer.shadowRadius = 8.0;
        self.signInView.layer.shadowPath = maskPath.CGPath;
        self.signInView.layer.masksToBounds = NO; // 设置阴影,这个需要设置 NO

        [self.signInView addSubview:self.signInBtn]; // 第二层view叠加在第一层 view上,设置圆角
        [self.signInBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.mas_equalTo(self.signInView);
        }];
        [self layoutIfNeeded];
        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
        //设置大小
        maskLayer.frame = self.signInBtn.bounds;
        //设置图形样子
        maskLayer.path = maskPath.CGPath;
        self.signInBtn.layer.mask = maskLayer;