我正在寻找一个CAGradientLayer
圆角。我不能使用.cornerRadius
,因为我只想圆顶两个角。另外,我不能使用.mask
,因为我想在之后对其进行截图并且renderInContext
不支持CALayer
蒙版。
我怎么能:
- A:不使用蒙版创建一个
CALayer
带有渐变和两个圆角的
或者
- B:截取类似于 的屏幕截图
UIGraphicsGetImageFromCurrentImageContext
,但要尊重蒙版。
我正在寻找一个CAGradientLayer
圆角。我不能使用.cornerRadius
,因为我只想圆顶两个角。另外,我不能使用.mask
,因为我想在之后对其进行截图并且renderInContext
不支持CALayer
蒙版。
我怎么能:
CALayer
带有渐变和两个圆角的或者
UIGraphicsGetImageFromCurrentImageContext
,但要尊重蒙版。我想出了一种程序化的方法来做到这一点。它涉及创建一个圆形图层,然后在其上绘制一个方形图层。您必须对渐变颜色和位置进行一些调整才能获得看起来不错的东西。
注意:鉴于您对口罩的要求,不确定此解决方案是否适合您
+ (void)makeGradientButton:(UIButton *)button {
// Create a rounded layer
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = button.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
gradient.cornerRadius = 8.0f;
// Now create a square layer that draws over the top
CAGradientLayer *gradient2 = [CAGradientLayer layer];
gradient2.frame = CGRectMake(0, 9, button.bounds.size.width, button.bounds.size.height-9);
gradient2.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor redColor] CGColor], nil];
gradient2.cornerRadius = 0.0f;
[gradient setMasksToBounds:YES];
[button.layer insertSublayer:gradient atIndex:0];
[button.layer insertSublayer:gradient2 atIndex:1];
[button setBackgroundColor:[UIColor clearColor]];
}