具有不突出显示的渐变图层的UIButton

时间:2012-05-21 15:49:35

标签: objective-c ios

创建了一个带渐变图层的按钮:

//MyGradient creates and returns gradient layers
CAGradientLayer *gradient = [MyGradient blueGradient];

//MyButton is a subclassed UIButton which adds some attributes
MyButton *testButton = [MyButton buttonWithType:UIButtonTypeCustom];
testButton.frame = CGRectMake(10, 10, 150, 50);
[testButton addTarget:self action:@selector(testButton:) forControlEvents:UIControlEventTouchUpInside];

[gradient setFrame:testButton.bounds];

testButton.clipsToBounds = YES;
[testButton.layer insertSublayer:gradient atIndex:0];    

[self.view addSubview:testButton];

如何在按下时让图像突出显示?我发现了几个示例代码,它们是UIButton的子类并覆盖了drawRect:方法。是否有更简单的方法让按钮突出显示?

3 个答案:

答案 0 :(得分:1)

您的按钮没有图像 - 因此无需突出显示。

将图像(渐变图像,如果需要)设置为按钮的背景......即使您没有为UIControlStateHighlighted设置图像,按钮也会“突出显示” - 基本上,iOS将反转颜色。 / p>

此外,如果您只需要水平/仅垂直渐变,则可能需要将此功能取消:resizableImageWithCapInsets

玩得开心!

答案 1 :(得分:0)

没有内置的方法可以做到这一点。要么重载UIButton并根据按钮的状态在drawRect中自己绘制渐变,要么为这两个状态创建2个渐变图像,并使用setBackgroundImage:image forState:UIControlStateNormal / UIControlStateHighlighted

答案 2 :(得分:0)

最简单的方法是将渐变放在图像文件中(最好可调整大小)并使用以下代码:

[testButton setImage:normalStateImage forState:UIControlStateNormal];
[testButton setImage:highlightStateImage forState:UIControlStateHighlighted];