Используйте
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
и передайте UIViewAnimationOptionRepeat
и, вероятно, UIViewAnimationOptionAutoreverse
в ваших вариантах.Вам не нужно предоставлять блок завершения и выполнять только первую анимацию.
Редактировать: вот пример кода для изображения, которое исчезает и исчезает бесконечно.
[UIView animateWithDuration:1.0
delay:0.0
options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse)
animations:^{
self.myImageView.alpha = 1.0;
}
completion:NULL];
Редактировать2: я вижу, что Вы должны только перепрошить это только 10 раз.Я не смог сделать это с блоками на самом деле.Когда выполнялся блок завершения, анимация, казалось, мгновенно завершала оставшиеся 9 раз.Однако я смог довольно легко сделать это только с помощью анимации старого стиля.
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationRepeatCount:10.0];
[UIView setAnimationRepeatAutoreverses:YES];
self.myImageView.alpha = 1.0;
[UIView commitAnimations];
Редактировать 3: Я нашел способ сделать это с блоками.
- (void)animate
{
if (self.animationCount < 10)
{
[UIView animateWithDuration:1.0
animations:^{
self.myImageView.alpha = 1.0;
}
completion:^(BOOL finished){
[self animateBack];
}];
}
}
- (void)animateBack
{
[UIView animateWithDuration:1.0
animations:^{
self.myImageView.alpha = 0.0;
}
completion:^(BOOL finished){
self.animationCount++;
[self animate];
}];
}