如何暂停uiview动画?

Posted

技术标签:

【中文标题】如何暂停uiview动画?【英文标题】:how to pause uiview animation? 【发布时间】:2014-10-26 23:50:03 【问题描述】:

如何暂停 uiview 动画并将其留在原处?

//#define ANIMATION_WORM_OPTIONS (UIViewAnimationOptionCurveLinear|
// UIViewAnimationOptionBeginFromCurrentState)
- (IBAction)pressUp:(id)sender 
    [self.game wormUp];

    [self.gameScene.wormView.layer removeAllAnimations];
    [UIView animateWithDuration:5 delay:0 options:ANIMATION_WORM_OPTIONS
                     animations:^
                           [self.gameScene.wormView moveUp];
                      completion:^(BOOL finished) 

                     ];

- (IBAction)pressRight:(id)sender 
     [self.game wormRight];
    [UIView animateWithDuration:5 delay:0 options:ANIMATION_WORM_OPTIONS
                     animations:^
                         [self.gameScene.wormView moveRight];
                      completion:^(BOOL finished) 

                     ];

例如,这是我想要做的:

当我第一次点击“右”时,一条蠕虫会向右移动。

然后当我在蠕虫向右移动时点击“向上”,蠕虫应该停止并向上。

我的代码中的问题是removeAllAnimations 将首先将蠕虫放到第一个动画结束的末尾,然后开始上升。

【问题讨论】:

【参考方案1】:

您需要将视图的框架更改为停止位置框架。只需在 view.layer 上执行 removeAllAnimation 之前添加以下内容。

self.theView.frame = [self.theView.layer.presentationLayer frame];

【讨论】:

【参考方案2】:
CFTimeInterval pausedTime = [self.gameScene.wormView.layer convertTime:CACurrentMediaTime() fromLayer:nil];
self.gameScene.wormView.layer.speed = 0.0;
self.gameScene.wormView.layer.timeOffset = pausedTime;

【讨论】:

以上是关于如何暂停uiview动画?的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序进入后台时暂停和恢复 UIView 动画

呈现另一个 UIViewController 时 UIView 动画暂停

如何暂停和恢复 UIView.animateWithDuration

UIView.animateWithDuration 或 UIScrollView.animateWithDuration - 如何在当前状态暂停

应该如何在动画中旋转UIView呢?

如何在 iOS 中使用 UIView 动画显示 UIView,如 UIAction 表?