ios - 在 iOS 中暂停动画( Objective-C )

标签 ios objective-c animation uiviewanimation

我在处理某些 Objective-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];
                     }];
}

那么问题来了:

本应在 pauseFlagYES 时发生的延迟并未发生。 当然,在写这篇文章之前,我尝试了各种想到的解决方案,比如更改选项,我还检查了输入 animationFunction pauseFlag 时的值是否为 YES。但在所有情况下,延迟都被忽略了。

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

除此问题外,仅供引用。该动画代码运行良好。

最佳答案

尝试使用 UIViewPropertyAnimator 为您的 View 添加动画:

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

关于ios - 在 iOS 中暂停动画( Objective-C ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56577814/

相关文章:

javascript - 如何将事件监听器添加到我的 javascript 函数

iphone - 带有复制菜单的不可编辑的 UITextField

ios - ListView 到uiwebview?

objective-c - 显示来自 UITableViewCell 类的警报 - Objective c

objective-c - 同时状态栏隐藏和 View 转换

jquery - 如何使用 jQuery 按顺序为多个元素设置动画?

javascript - 在 iOS 版 Chrome 上拦截 AJAX 请求?

ios - 当应用程序终止时,位置后台模式是否可以快速工作?

ios - 将 ReactiveCocoa 中的信号组合成一个在所有变化时触发的新信号

ios - 我应该在哪里为 UIDynamicAnimator 调用 addBehavior?