如何在我的iPhone应用程序中重绘GradientButton?

时间:2011-09-12 19:58:57

标签: iphone objective-c uiview uibutton

我的应用程序底部有一个按钮,我正在使用UIButton库创建GradientButton(在此处找到:http://code.google.com/p/iphonegradientbuttons/)。

我可以创建很好的按钮,但我不能让世界弄清楚如何在我设置颜色后更改创建按钮的颜色渐变...

作为一个例子,我尝试用各种技巧改变我的按钮的actionlistener中的渐变,例如(我是第一次在viewdidload中设置它):

- (IBAction)buttonPressed:(id)sender{
    NSLog(@"buttonPressed;changing style");    
    [checkInCheckOutButton useAlertStyle];//build-in method in gradientbutton that sets colour
    [checkInCheckOutButton setNeedsDisplay];//added this when first didn't work.
}

我在这里遗漏了什么吗?如果我更改任何其他内置组件,例如常规按钮的文本和/或背景,则一切正常。

如果有什么东西我没有得到关于如何在目标c中重新绘制物体,我全都耳朵......

编辑:建议后,我尝试添加一些代码来改变按钮的颜色数组。不幸的是,这也不起作用:

- (IBAction)buttonPressed:(id)sender{

NSLog(@"buttonPressed;changing style");    
self.checkInCheckOutButton.normalGradientColors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor blueColor], nil];
self.checkInCheckOutButton.highlightGradientColors = [NSArray arrayWithObjects:[UIColor greenColor], [UIColor whiteColor], nil];
[self.checkInCheckOutButton setNeedsDisplay];//tried with and without

2 个答案:

答案 0 :(得分:0)

取决于您何时/为何要更改它。

看起来您可以使用normalGradientColorshighlightedGradientColors直接更改颜色。

那......老实说,你需要做的就是这样。只需更改这些属性......交上一系列颜色。

//This changes the colors for UIControlStateNormal
theButton.normalGradientColors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor blueColor] CGColor], nil];
//This changes the colors for UIControlStateHighlighted
theButton.HighlightedGradientColors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor blueColor] CGColor], nil];
编辑:添加演员到CGColor。如果您使用ARC,则必须添加桥接标记而不是“简单”强制转换

(__bridge id)

答案 1 :(得分:0)

我找到了解决方案。将这些行添加到每个use...Style方法的开头:

normalGradient = NULL;
highlightGradient = NULL;

并在这些方法的末尾添加[self setNeedsDisplay];

完成这些更改后,它可以正常工作!