如何将CAGradientLayer添加到UIButton

时间:2012-12-28 18:44:53

标签: ios uibutton cagradientlayer

我正在尝试修改按钮的外观并花了很长时间试图找出为什么我不能应用渐变到它,就像下面这个简单的代码一样:

[self.playButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
self.playButton.backgroundColor = [UIColor blackColor];

CAGradientLayer *gradient = [[CAGradientLayer alloc] init];
gradient.frame = self.playButton.bounds;
gradient.position = CGPointMake(self.playButton.bounds.size.width/2, self.playButton.bounds.size.height/2);
gradient.colors = [NSArray arrayWithObjects:
                   (id)[UIColor greenColor].CGColor,
                   (id)[UIColor redColor].CGColor,
                   nil];
gradient.locations = [NSArray arrayWithObjects:
                      [NSNumber numberWithFloat:0.0f],
                      [NSNumber numberWithFloat:1.0f],
                      nil];

[self.playButton.layer addSublayer:gradient];

它执行,但没有任何反应。我知道代码应该有效,因为许多其他代码都使用它,并且在将self.playButton更改为self.view时,它会向UIView添加漂亮的红绿渐变图层。

值得注意的是,我将自定义按钮定义为IBOutlet,如下所示:

@property (weak, nonatomic) IBOutlet UIButton *playButton;

非常感谢任何帮助。

更新& FIX

当更改按钮以使用可缩放图像而不是渐变时,我忘记重新评论渐变代码(在尝试rokjarc的想法之后)以及更改按钮的imageView.content时至UIViewContentModeScaleToFill显示的渐变......

self.playButton.imageView.contentMode = UIViewContentModeScaleToFill;

谢谢rokjarc我想:D

1 个答案:

答案 0 :(得分:1)

只需更改

self.playButton.backgroundColor = [UIColor blackColor];

self.playButton.backgroundColor = [UIColor clearColor];

刚刚测试过它。