Анимация IOS Core, как я могу вызвать animationDidStop: метод, когда моя последовательность анимации заканчивается? - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть следующая последовательность изображений для анимации:

IBOutlet UIImageView *block;
NSArray *image_arr = [NSArray arrayWithObjects:[UIImage imageNamed:@"img1"],[UIImage imagedNamed:@"img2"],nil];
block.animationImages = image_arr;
block.animationDuration =1;
block.animationRepeatcount =5;
[block startAnimating];

И метод animationDidStop:

-(void)animationDidStop:(NSString*)animationID finished:(BOOL)didFinish context:(void*)context{
NSLog(animationID);
}

Что мне нужно сделать, чтобы метод animationDidStop вызывался в конце анимации?

Ответы [ 3 ]

1 голос
/ 24 ноября 2011

Свойство «animationImages» в UIImageView не связано с coreanimation, оно просто запускает внутренний NSTimer, который переключал изображение.

-(void)animationDidStop:finished:context:

селектор вызывается как часть основной анимации.

В вашем случае я бы попробовал что-то вроде этого:

    IBOutlet UIImageView *block;
NSArray *image_arr = [NSArray arrayWithObjects:[UIImage imageNamed:@"img1"],[UIImage imagedNamed:@"img2"],nil];
block.animationImages = image_arr;
block.animationDuration = animationDuration;
block.animationRepeatcount = animationRepeatCount;
[block startAnimating];
[self performSelector:@selector(animationFinished:) withObject:@"someAnimationId" afterDelay: animationDuration * animationRepeatCount];

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

Если это окажется проблемой проверьте метод forceLoad этого ответа , и если это не сработает, вызовите startAnimation для скрытого UIImageView, это помогло мне один раз.

0 голосов
/ 24 ноября 2011

В последних версиях iOS 4.2 и более поздних версиях вы должны использовать блоки для анимации

Следующее действие подтолкнет вас в правильном направлении, попробуйте изменить UIViewAnimationOption на другое:

[UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionRepeat animations:^{
                //Animation here
            }completion:^(BOOL finished) {
                if(finished){
                    //Your Code here
                }
            }
0 голосов
/ 24 ноября 2011

Что мне нужно сделать, чтобы метод animationDidStop вызывался в конце анимации?

Вы не можете вызвать его, потому что это не Core Animation. Вы мысленно смешали две разные вещи:

  • Возможность создавать очень простую анимацию в мультяшном стиле с помощью UIImageView, показывающего последовательность изображений;

  • Базовая анимация, в которой может быть блок завершения или обработчик завершения.

Я предлагаю вам либо использовать real Core Animation, где вы можете фактически настроить анимацию и блок завершения или обработчик, либо просто подделать ее, используя отложенную производительность для обратного вызова в свой собственный. код через 5 секунд после окончания этой псевдо-анимации.

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