Повторение анимации с помощью Stop Selector - PullRequest
0 голосов
/ 26 мая 2010

Я пытаюсь повторить анимацию, пока не будет выполнено определенное условие. Примерно так:

- (void) animateUpdate {
    if (inUpdate) {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:2.0];
        [UIView setAnimationDelegate: self];
        [UIView setAnimationDidStopSelector: @selector(animateUpdate)];
        button.transform = CGAffineTransformMakeRotation( M_PI );
        [UIView commitAnimations];
    }
}

Это запустится в первый раз, но не повторится. Селектор будет вызываться только до сбоя приложения.

Как мне это сделать?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 октября 2010

Та же проблема. Вот код, который делает то же самое

- (void)beginRotation{
  [UIView beginAnimations:@"ghostRotate" context:NULL];
  [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:5.0];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
    ghostImage.transform = CGAffineTransformMakeRotation(M_PI*0.5);
    [UIView commitAnimations];
}

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context{
    if ([finished boolValue]){
    [self beginRotation];
    }
}

Когда первая анимация завершается, она вызывает didStop ... Это снова вызывает метод beginAnimation, который сразу же возвращается к didStop снова. Закончено, установлено в 1, и оно входит в условие переполнения стека ...

мысли

0 голосов
/ 26 мая 2010

Базовая анимация работает асинхронно, то есть ваш код не блокирует поток, и анимация фактически начинается при следующем проходе цикла выполнения. Чтобы повторить анимацию, вы должны перезапустить ее в селекторе animation-did-stop или явно использовать CAAnimation's repeatCount , в зависимости от ваших потребностей. В противном случае Core Animation объединит все ваши анимации в одну.

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