如何停止动画,但让它完成当前动画

时间:2012-08-06 04:56:06

标签: cocoa core-animation

我制作动画并让它永远运行。现在我想点击一个按钮后停止它。然后动画将按钮的图像从0度旋转到360度。 我想停止动画,但让动画完成当前循环。例如,如果按钮旋转200度,我单击停止按钮,我希望动画仍然运行到360度,然后停止。 动画代码如下所示:

CABasicAnimation *anim2 = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
anim2.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
anim2.fromValue = [NSNumber numberWithFloat:0];
anim2.toValue = [NSNumber numberWithFloat:-((360*M_PI)/180)];
anim2.repeatCount = HUGE_VALF;
anim2.duration = 10;
[self.imgBtn.layer addAnimation:anim2 forKey:@"transform"];

谢谢!

2 个答案:

答案 0 :(得分:2)

虽然您可以使用animationForKey:从图层获取动画,但您无法以这种方式修改动画。正如文档所解释的那样:

  的讨论      

尝试修改返回对象的任何属性将导致未定义的行为。

你需要做什么

您必须删除无限动画并添加另一个动画以制作最终结束动画。

  1. 使用表示层确定图层的当前旋转。
  2. 删除无限动画
  3. 从您从表示层获得的值到结束状态添加新动画。
  4. 如何从表示层获取值。

    在动画期间,您的模型不会更改(使用Core Animation时)。相反,您在屏幕上看到的是图层表示层。然后,您可以从表示层读取当前值,就像它是任何其他层一样。在您的情况下,您可以使用[myLayer valueForKey:@"transform.rotation"];

    获得轮换

答案 1 :(得分:2)

或者,您可以创建一个带有完成方法的动画,该方法在无限循环中再次触发动画。

让完成例程在提交重复之前检查一个标志。

如果标志为false,请不要再次触发动画。

然后让你的按钮操作只需将repeat标志设置为false。当前动画将运行完成,然后不会重复。