Базовая анимация для прошивки (UILabel) - PullRequest
0 голосов
/ 24 марта 2011

Я использую базовую анимацию для отображения промежуточных результатов (используя UILabel) в игре на iPhone. Мне нужно это повторить для определенного подсчета для конкретного удара.
Счет должен быть мигать для определенного счета, а затем исчезнуть.
Так что должно идти от альфа 0.0 -> 1.0 -> 0.0

Ниже приведен код, с помощью которого я пытаюсь добиться этого.

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationRepeatCount:repeatCount];
[UIView setAnimationRepeatAutoreverses:YES];
playerScore.alpha = 1.0f;
[UIView commitAnimations];  

Проблема в том, что после окончания анимации альфа возвращается к 1,0

Есть предложения?

Ответы [ 2 ]

6 голосов
/ 24 марта 2011

Я бы использовал более мощный animateWithDuration:delay:options:animations:completion: метод на UIView. См. Просмотр руководства по программированию или Справочник по классам UIView

Более конкретно, это может выглядеть так: метод занимает два блока: один для самой анимации и один блок, который выполняется после завершения анимации. На первый взгляд это может показаться немного странным, но это всего лишь синтаксис блока.

[UIView animateWithDuration:1.0 delay:0.f options:(UIViewAnimationOptionAutoreverse| UIViewAnimationOptionRepeat)
   animations:^{
   playerScore.alpha=1.f;
   } completion:^(BOOL finished){
   playerScore.alpha=0.f;
   }];

Это решение для iOS версии 4 или выше. Если вы хотите настроить таргетинг на версии до этого, вы должны использовать обратный вызов делегата. Установите селектор, который будет выполнен, когда анимация сделана следующим образом:

[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(flashingDidStop:finished:context:)];
//with the callback method
- (void)flashingDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
   //code to execute in your case
   playerScore.alpha = 0.f;
}
1 голос
/ 24 марта 2011

Если вам нужно это для работы в iOS <4.0, попробуйте это: </p>

 - (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
  playerScore.alpha = 0.0f;
}

...

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView setAnimationDuration:1.0];
[UIView setAnimationRepeatCount:repeatCount];
[UIView setAnimationRepeatAutoreverses:YES];
playerScore.alpha = 1.0f;
[UIView commitAnimations];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...