2

我有一个 UIView 动画块,它使用该UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoReverse选项,所以它继续运行,但在某些时候我需要停止动画,但更重要的是停止它并使视图返回到其原始位置。

我已经尝试过[dot1.layer removeAllAnimations];,但它停止了它的轨道而不将它返回到它的原始位置,它停止了中间动画。

我尝试停止它,然后只运行第二个动画以将其返回到正确的帧,但这可能有点生涩,因为我不知道它需要多长时间才能持续多长时间等。

那么是否可以在动画完成最后一个周期而不是中途后简单地停止动画?

谢谢。

4

2 回答 2

1

你应该试试这个:

[UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction animations:^
{
    view.frame = CGRectMake(0, 100, 200, 200);
} completion:^(BOOL finished)
{
    if(! finished) return;
}];

并停止动画使用这个:

[view.layer removeAllAnimations];
于 2013-03-01T11:10:26.243 回答
0

我已经尝试了公认的解决方案,但它对我不起作用。动画在一次运行后就停止了。在网上挖掘让我相信这[self.view.layer removeAllAnimations]是停止动画的推荐方法(另一种方法可以在以下链接中看到,作为提问者对已接受解决方案的评论

使用 BOOL / 完成块停止自动反转 / 无限重复 UIView 动画)。

对我有用的方法是 BooRanger 给出的方法(甚至 jrturton 也接受了它)。我在类中设置了一个名为 stopAnimations 的布尔属性,并将其值初始化为 NO。每当我想停止动画时,我将 stopAnimations 设置为 YES,然后调用[self.view.layer removeAllAnimations]下一行。然后在完成块中,我执行以下操作。

if(self.stopAnimations){
self.finishAnimations = NO;
return;
}

希望这可以帮助某人。:)

于 2014-08-23T04:46:29.753 回答