日常代码中,提到圆角一般我们都会通过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