在 iOS (objective C) 中暂停动画
Pausing an animation in iOS (objective C)
我在某些 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];
}];
}
那么问题来了:
当 pauseFlag 为 YES 时应该发生的延迟没有发生。
当然,在写这个 post 之前,我已经尝试了各种想到的解决方案,比如更改选项,并且我还检查了在输入 animationFunction pauseFlag 时是否有值是。但在所有情况下,延迟都被忽略了。
我做错了什么?我需要在我的动画中插入一个暂停,我认为这是最简单的方法。
有人有想法吗?
除了这个问题,仅供参考。此动画代码运行良好。
尝试使用 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];
});
此 post 中的所有代码均已在 Xcode 10.2.1.
中测试
我在某些 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];
}];
}
那么问题来了:
当 pauseFlag 为 YES 时应该发生的延迟没有发生。 当然,在写这个 post 之前,我已经尝试了各种想到的解决方案,比如更改选项,并且我还检查了在输入 animationFunction pauseFlag 时是否有值是。但在所有情况下,延迟都被忽略了。
我做错了什么?我需要在我的动画中插入一个暂停,我认为这是最简单的方法。 有人有想法吗?
除了这个问题,仅供参考。此动画代码运行良好。
尝试使用 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];
});
此 post 中的所有代码均已在 Xcode 10.2.1.
中测试