iOS集渐变、投影与圆角于一身的按钮

日常代码中,提到圆角一般我们都会通过layer的几个属性设置

Btn.layer.cornerRadius = k_FitIphoneIpadSize(25);
Btn.layer.masksToBounds = YES;
Btn.layer.borderWidth = k_FitIphoneIpadSize(2);
Btn.layer.borderColor = RGB(232, 232, 232).CGColor;

设置投影设置如下

Btn.layer.shadowOffset = CGSizeMake(0, 10);
Btn.layer.shadowOpacity = 0.08;
Btn.layer.shadowRadius = 1;
Btn.layer.shadowColor = [UIColor blackColor].CGColor;

但是,投影中的layer.layer.maskToBounds默认是NO才会显示出来。

那么同时设置这两个会造成冲突,看到网上有人提出来了可以通过添加上层一个layer,来实现验证后确实可以。

那么我自定义个按钮,然后在这个layer上同时实现渐变好了,代码如下

 CAGradientLayer *subLayer = [CAGradientLayer layer];
 [self.layer insertSublayer:subLayer atIndex:0];
 subLayer.frame = self.bounds;

    // 使用渐变色
    [subLayer setColors:@[(id)[[UIColor colorWithRed:255.f/255.f green:137.f/255.f blue:46/255.f alpha:1] CGColor],(id)[[UIColor colorWithRed:255.f/255.f green:164.f/255.f blue:48.f/255.f alpha:1] CGColor]]];//渐变数组
    // 开始点
    subLayer.startPoint = CGPointMake(1, 1);
    // 结束点
    subLayer.endPoint = CGPointMake(0, 0);

    // 使用圆角
    subLayer.cornerRadius = self.frame.size.height / 2;

    // 使用阴影
    subLayer.shadowColor = [UIColor colorWithRed:240/255.f green:89/255.f blue:17/255.f alpha:0.5].CGColor;
    subLayer.shadowOffset = CGSizeMake(0, 4);
    subLayer.shadowOpacity = 0.5;

ps:项目中有些按钮需要只要个别角为圆角,实现如下:

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect: topView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(5,5)];
//创建 layer
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = topView.bounds;
//赋值
maskLayer.path = maskPath.CGPath;
topView.layer.mask = maskLayer;

topView即为需要实现上边左右顶角需要圆角的view

你可能感兴趣的:(iOS日常问题,iOS圆角,iOS投影,圆角和投影,cornerRadius)