UIView Анимационный блок не работает - PullRequest
0 голосов
/ 18 февраля 2011

Я пытаюсь заставить свой таймер мигать красным, если в игре осталось менее 10 секунд.По какой-то причине анимация не работает.TimeLabel просто становится белым и остается таким.Вот код, который я использую:

if (timeLeft <= 9 && timeLeft > 0) {
    timeLabel.textColor = [UIColor redColor];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationDelegate:self];
    timeLabel.textColor = [UIColor whiteColor];
    [UIView commitAnimations];
}

Странно то, что я использую этот точно такой же блок кода в другом приложении, которое работает отлично.Возможно, у меня есть другая анимация где-то в моем классе, которая мешает этому?

Ответы [ 2 ]

5 голосов
/ 18 февраля 2011

Цвет текста не является анимируемым свойством.Вместо этого вы можете попробовать использовать CATextLayer .

Другой вариант - иметь идентичный UILabel с красным текстом, сидящим поверх белого UILabel, и плавно переходить от прозрачного к непрозрачному и обратно.Это будет выглядеть так:

if (timeLeft <= 9 && timeLeft > 0) {
    redTimeLabel.alpha = 0;
    [UIView animateWithDuration:1 
                     animations:^{
                         redTimeLabel.alpha = 1;
                     }
                     completion:^(BOOL finished){
                         redTimeLabel.alpha = 0;
                     }];
}
0 голосов
/ 18 февраля 2011

Похоже, вы забыли

[UIView setAnimationDidStopSelector:
                @selector(animationFinished:finished:context:)];

Кроме того, если блок, который вы разместили, выполняется в основном цикле, вы проверяете, происходит ли анимация?Например, что-то типа redBlinkingDidStart или что-то в этом роде ... На всякий случай: P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...