出现在上面的self.layer背后的CAGradientLayer

时间:2012-07-31 10:45:15

标签: objective-c cocoa-touch calayer quartz-core

我正在尝试创建一个自定义的UIButton类,除了在绘制按钮的背景,并使用insertSubLayer后面的方法将其添加为子图层时,它仍然出现在UIButton Textlabel的前面。

我的代码发布在下面,非常感谢任何帮助。

CALayer *layer = self.layer;

layer.cornerRadius = 3.0f;
layer.masksToBounds = YES;
layer.borderWidth = 1.0f;
layer.borderColor = [UIColor colorWithWhite:0.5f alpha:0.5f].CGColor;
self.titleLabel.textColor = [UIColor greenColor];
//layer.backgroundColor = [UIColor greenColor].CGColor;

bgColor = [CAGradientLayer layer];
bgColor.frame = self.layer.bounds;
self.backgroundColor = [UIColor colorWithWhite:1 alpha:1];
bgColor.colors = [NSArray arrayWithObjects:
                     (id)[UIColor colorWithWhite:0.97f alpha:1].CGColor,
                     (id)[UIColor colorWithWhite:0.87f alpha:1].CGColor,
                     nil];
bgColor.locations = [NSArray arrayWithObjects:
                        [NSNumber numberWithFloat:0.0f],
                        [NSNumber numberWithFloat:1],
                        nil];
[self.layer addSublayer:bgColor];
[self.layer insertSublayer:bgColor below:layer];

1 个答案:

答案 0 :(得分:1)

代码中的

self.layerlayer指向同一个对象。你要求图层在自身后面插入一个子图层 - 这是不可能的。子图层包含在父图层中。尝试

[self.layer insertSublayer:bgColor atIndex:0];

而不是

[self.layer addSublayer:bgColor]; 
[self.layer insertSublayer:bgColor below:layer];

这将在按钮的图层层次结构中的最低点添加渐变。