Анимация цвета текста UIButton

Есть ли способ анимировать свойство textColor UIButton? Я нашел несколько решений для цветной анимации текста UILabel, но не видел ни одного для UIButton.

Ответ 1

NSTimer абсолютно не подходит как инструмент анимации и не должен использоваться для хронометража в целом, где необходима точность (частота кадров). Это сообщение в блоге отлично иллюстрирует мою позицию о том, что делать с неимоверными свойствами UILabel, которые должны быть отправлены на сервер визуализации через CA, а не в NSTimer. Вместо UILabel вы можете использовать или завершать CATextLayer и анимировать его свойство foregroundColor в стандартном блоке анимации.

Ответ 2

Использовать переход с видом

[UIView transitionWithView:backButton
                          duration:0.5f
                           options:UIViewAnimationOptionTransitionCrossDissolve
                        animations:^{
                            [backButton setTitleColor:[_peacock lighten:d.primary] forState:UIControlStateNormal];
                        }
                        completion:^(BOOL finished){
                        }];

Ответ 3

Здесь очень хорошо сказано. Он в основном использует этого удобного парня:

[UIView transitionWithView:duration:options:animations:^()completion:^()]; 

Ответ 4

Очевидно, вам нужно будет использовать

[UIButton setTitleColor:[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0] forState:UIControlStateNormal];

Что касается фактического получения анимации и изменения цвета с течением времени, вам нужно создать экземпляр NSTimer и использовать параметр @selector paramater, чтобы указать его на определенный метод для запуска. Каждый раз, когда таймер запускается, он запускает метод, который затем меняет цвет вашего UIButton.

 [NSTimer scheduledTimerWithTimeInterval:2.0f
         target:self
     selector:@selector(updateCounter:)
     userInfo:nil
     repeats:YES];

Также проверьте: http://servin.com/iphone/iPhone-Timers-and-Animated-Views.html

Ответ 5

Вы можете использовать две кнопки (или ярлыки и т.д.) С разными цветами, которые расположены в одном положении:

button1 = UIButton(frame: frame)
button2 = UIButton(frame: frame) // same frame

button1.setTitleColor(UIColor.redColor(), forState: .Normal) // red
button2.setTitleColor(UIColor.blueColor(), forState: .Normal) // blue

После этого вы можете достичь анимации цветов путем анимации перехода кнопки2:

UIView.animateKeyframesWithDuration(
    1.0, delay: 0, options: [.Autoreverse, .Repeat],
    animations: {
        UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: {
            self.button2.alpha = 1.0
        })

        UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.5, animations: {
            self.button2.alpha = 0.0
        })
    }, completion: nil)

Ответ 6

На самом деле это не анимация, но она будет работать.

Создайте таймер с любой частотой, с которой хотите анимировать цвета.

Пусть этот таймер вызовет метод, changeColorOnButton каждый раз, когда он срабатывает.

[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(changeColorOnButton:) userInfo:nil repeats:YES];

Создайте массив цветов, colorsArray (либо упорядочивайте цвета раньше времени, либо добавьте связку в массив и перетасовывайте их для рандомизации. Создайте int, intForColorInArray.

В методе changeColorOnButton сделайте что-нибудь вроде:

- (void) changeColorOnButton:(UIButton *) button {

     UIColor *nextColor = [colorsArray objectAtIndex:intForColorArray];
     [button.titleLabel.setTextColor:nextColor];
     intForColorArray = (intForColorArray +1) % [colorsArray count];
}