Есть ли способ анимировать свойство textColor UIButton? Я нашел несколько решений для цветной анимации текста UILabel, но не видел ни одного для UIButton.
Анимация цвета текста 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];
}