UIView Gradient有圆角?

时间:2011-11-25 18:58:08

标签: objective-c uiview ios5 gradient roundedcorners-dropshadow

我有一个带有圆角和阴影的UIView,已实现并正常工作。但是UIView有一种无聊的背景颜色,白色。所以我想把一个渐变层作为背景。在标签,按钮下面,最重要的是,使圆角仍然出现。

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = subHudView.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
[subHudView.layer addSublayer:gradient];
subHudView.layer.cornerRadius = 8;
subHudView.layer.masksToBounds = NO;
subHudView.layer.shadowOffset = CGSizeMake(-5, 5);
subHudView.layer.shadowRadius = 8;
subHudView.layer.shadowOpacity = 0.75;

这是我尝试实现它时的代码,但渐变层位于视图中的所有内容之上。如何使渐变位于所有控件和标签下?每个响应的帮助将不胜感激。

5 个答案:

答案 0 :(得分:2)

添加到视图中的图层(addSublayer)会绘制在视图自己的图层前面,这是您所有视图的绘图所在。您想要的是将渐变绘制到视图的自己的图层中。为此,请在视图中实施+layerClass,指定您希望视图的图层 为渐变视图。

因此,例如(在视图中自己的代码中):

+(Class)layerClass {
    return [CAGradientLayer class];
}

-(void)awakeFromNib {
    [super awakeFromNib];
    CAGradientLayer* layer = (CAGradientLayer*)self.layer;
    layer.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
    layer.cornerRadius = 8;
    layer.masksToBounds = NO;
    layer.shadowOffset = CGSizeMake(-5, 5);
    layer.shadowRadius = 8;
    layer.shadowOpacity = 0.75;
}

如果你然后实现了drawRect:,那么你当然会消除你的渐变和圆角。有办法......

答案 1 :(得分:1)

当你addSublayer:时,它会在所有子图层的顶部添加图层。

您应该使用类似的东西:

[subHudView.layer insertSublayer:gradient atIndex:0];

这样,CAGradientLayer将低于其他所有内容。

答案 2 :(得分:1)

在Swift中:

let gradientLayer = CAGradientLayer()
gradientLayer.cornerRadius = 20.0

答案 3 :(得分:0)

除了insertSublayer:atIndex:gcamp建议,你也可以使用insertSublayer:above:和insertSublayer:below:将你的图层放在特定的地方。

[self.view.layer insertSublayer:gradient below:someUIObject];

答案 4 :(得分:0)

不是创建新图层,而是覆盖视图的图层方法:

+ (Class)layerClass
{
    return [CAGradientLayer class];
}

这将确保您的视图创建CAGradientLayer而不是基本CALayer作为基础层。

然后,在init期间获取图层:

CAGradientLayer *gradLayer = self.layer;
gradLayer.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];

并将渐变分配给它。

干净整洁......