Приостановка анимации в iOS (цель C) - PullRequest
0 голосов
/ 13 июня 2019

У меня возникли проблемы с обработкой анимации в каком-то объективном коде C.

Сначала приведем соответствующий код:

BOOL pauseFlag; // Instance variable.
CGFloat animationDuration,pauseDuration; // Instance variables.
......
pauseFlag = NO;
animationDuration = 1.0;
pauseDuration = 1.0;

- (void)animationFunction
{
    [UIView animateWithDuration:animationDuration
                          delay:pauseFlag?pauseDuration:0
                        options:UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                        ......
                     }
                     completion:^(BOOL finished){
                        ......
                        pauseFlag = Some_New_Value;
                        [self animationFunction];
                     }];
}

Тогда возникает проблема:

Задержка должна иметь место, когда pauseFlag равен ДА не происходит.Конечно, перед написанием этого поста я попробовал различные решения, которые мне приходили в голову, такие как изменение параметров, и я также проверил, что при вводе animationFunction pauseFlag имеет значение YES .Но во всех случаях задержка была проигнорирована.

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

Только для информации, помимо этой проблемы.Этот анимационный код работает нормально.

1 Ответ

1 голос
/ 13 июня 2019

Попробуйте оживить ваш вид с помощью UIViewPropertyAnimator:

UIViewPropertyAnimator* animator = [UIViewPropertyAnimator runningPropertyAnimatorWithDuration:animationDuration
                                                                                         delay:pauseFlag?pauseDuration:0
                                                                                       options:UIViewAnimationOptionBeginFromCurrentState
                                                                                    animations:^{
                                                                                        ......       
                                                                                    }
                                                                                    completion:^(UIViewAnimatingPosition finalPosition) {
                                                                                        ......
                                                                                        pauseFlag = Some_New_Value;
                                                                                        [self animationFunction];                                                 
                                                                                    }];

Если вы хотите приостановить анимационный вызов pauseAnimation:

[animator pauseAnimation];

Чтобы возобновить его, позвоните startAnimation:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [animator startAnimation];
});

Весь код в этом посте был протестирован в Xcode 10.2.1.

...