Не удается запустить анимацию один за другим - PullRequest
2 голосов
/ 11 февраля 2012

Я пытаюсь анимировать изображение для поворота влево и вправо, когда выбрано, в основном, чтобы позволить пользователю, какой объект он касается.

Я нашел код для анимации:

- (void)rotateImage:(UIImageView *)image duration:(NSTimeInterval)duration 
              curve:(int)curve degrees:(CGFloat)degrees delay:(CGFloat)delay
{
    // Setup the animation
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelay:delay];
    [UIView setAnimationDuration:duration];
    [UIView setAnimationCurve:curve];
    [UIView setAnimationBeginsFromCurrentState:YES];

    // The transform matrix
    CGAffineTransform transform = 
    CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(degrees));
    image.transform = transform;

    // Commit the changes
    [UIView commitAnimations];
}

Однако, когда я пытаюсь запустить две анимации, работает только последняя. Даже с надлежащей задержкой будет отображаться только вторая анимация:

[self rotateImage:self duration:.5 
                curve:UIViewAnimationCurveEaseIn degrees:60 delay:0];
    [self rotateImage:self duration:.5 
                curve:UIViewAnimationCurveEaseIn degrees:-60 delay:5];

Что я могу сделать, чтобы создать анимацию, чтобы она вращалась влево, а затем вращалась вправо?

Ответы [ 3 ]

4 голосов
/ 11 февраля 2012
[UIView animateWithDuration:0.2 animations:^{
// animation left
    [UIView setAnimationDelay:10];

    } completion:^(BOOL finished){

[UIView animateWithDuration:0.2 animations:^{
       // animation right
    } completion:^(BOOL finished){
       // done
    }];

    }];

нашел его здесь

https://developer.apple.com/library/content/featuredarticles/Short_Practical_Guide_Blocks/

1 голос
/ 11 февраля 2012
[UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
    self.view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(60));
} completion:^(BOOL finished){
    [UIView animateWithDuration:0.5f delay:5.0f options:UIViewAnimationOptionCurveEaseIn
      animations:^{
        self.view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(-60));
      }
      completion:^(BOOL finished){}];
}];
0 голосов
/ 11 февраля 2012

Анимационные блоки - определенно лучший способ. Это должно повторить то, что вы пытаетесь сделать, включая смягчение. Это предполагает ваш вызов из контроллера представления, но если вы помещаете этот код в UIView или UIImageView, то просто замените self.view на self.

[UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
    self.view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(60));
} completion:^(BOOL finished){}];

[UIView animateWithDuration:0.5f delay:5.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
    self.view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(-60));
} completion:^(BOOL finished){}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...