暂停UIView的关键帧动画

时间:2013-12-05 15:13:12

标签: ios objective-c animation uiview

我正在创建一个加载栏,如果采取特定操作,我想暂停和反转。

我在下面有以下代码,可以在另一个视图中设置动画。我将如何暂停此动画并在动画对象的那个时间点在CURRENT帧上应用另一个动画。我希望能够在当前动画中的任何给定时间将此栏设置为0宽度标记。

-(void)animateProgressBar
{
    CGRect endingFrame = self.frame;

    [UIView animateKeyframesWithDuration:self.time delay:0.0 options:0 animations:^{
        [UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:1.0 animations:^{
            self.loadingBar.frame = endingFrame;
        }];
    } completion:^(BOOL finished) {
        NSLog(@"TADA");
    }];
}

2 个答案:

答案 0 :(得分:3)

如果您想从现在开始播放新动画,只需使用UIViewKeyframeAnimationOptionBeginFromCurrentState选项启动新动画(或者如果只是animateWithDuration,请使用UIViewAnimationOptionBeginFromCurrentState

答案 1 :(得分:2)

您可以导入QuartzCore框架,添加

#import <QuartzCore/QuartzCore.h>

您可以通过调用以下内容删除现有动画:

[self.loadingBar.layer removeAllAnimations];

之后你可以开始新的动画了。 如果你想暂停它,你必须引用当前动画:

CALayer *currentLayer = self.loadingBar.layer.presentationLayer;

你必须保存它:

self.loadingBar.layer.transform = currentLayer.transform;

你可以在另一个[UIView animateWith .....方法。