具有圆角顶角的CAGradientLayer(不使用.mask)

时间:2012-06-16 05:17:27

标签: objective-c screenshot calayer quartz-core

我希望创建一个带圆角的CAGradientLayer。我不能使用.cornerRadius,因为我想只绕过前两个角。此外,我无法使用.mask因为我想在之后截取它,renderInContext不支持CALayer个屏蔽。

我怎么能:

  • 答:使用渐变和两个圆角创建CALayer,而不使用蒙版

  • B:截取类似UIGraphicsGetImageFromCurrentImageContext的截图,但尊重面具。

1 个答案:

答案 0 :(得分:0)

我想出了一种程序化方法来做到这一点。它涉及创建一个圆形图层,然后在其上绘制一个方形图层。你必须做一些渐变颜色和位置的游戏,以获得看起来不错的东西。

注意:根据您对面具的要求,不确定此解决方案是否适合您

+ (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]];
}