在iOS中暂停动画(目标C)

时间:2019-06-13 09:50:08

标签: ios objective-c animation uiviewanimation

在某些目标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 YES 时应该发生的延迟不会发生。 当然,在撰写本文之前,我尝试过各种解决方案,例如更改选项,并且还检查了输入 animationFunction pauseFlag 时的值为 YES 。但是在所有情况下,延迟都被忽略了。

我做错了什么?我需要在动画中插入一个暂停,并认为这是最简单的方法。 有人有主意吗?

仅供参考,除了此问题。这个动画代码工作正常。

1 个答案:

答案 0 :(得分:1)

尝试使用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中进行了测试。