Как мне сделать перерисовку GradientButton в моем приложении для iPhone? - PullRequest
1 голос
/ 12 сентября 2011

У меня есть приложение с кнопкой внизу, которую я создаю, используя библиотеку UIButton, GradientButton (находится здесь: http://code.google.com/p/iphonegradientbuttons/).

Я могу создавать кнопки отлично, но я не могу понять, как изменить градиент цвета созданной кнопки после того, как я однажды установил цвет ...

В качестве примера я попытался изменить градиент в слое действий моей кнопки, например, с помощью различных приемов (я устанавливаю его в 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 голосов
/ 05 июня 2012

Я нашел решение.Добавьте эти строки в начало каждого use...Style метода:

normalGradient = NULL;
highlightGradient = NULL;

и добавьте [self setNeedsDisplay]; в конце этих методов.

После этих изменений все работает!

0 голосов
/ 13 сентября 2011

зависит от того, когда / почему вы хотите изменить его.

Похоже, вы можете просто использовать normalGradientColors и highlightedGradientColors, чтобы напрямую изменить цвета.

Это ...честно, кажется, все, что вам нужно сделать.просто измените эти свойства ... рука в массиве цветов.

//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)
...