2

我制作动画并让它永远运行。现在我想在点击一个按钮后停止它。然后动画将按钮的图像从 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"];

谢谢!

4

2 回答 2

2

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

讨论

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

你必须做的

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

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

如何从表示层获取值。

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

于 2012-08-06T09:41:01.880 回答
2

或者,您可以使用完成方法在无限循环中再次触发动画创建单个动画。

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

如果标志为假,则不再触发动画。

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

于 2012-08-06T21:02:59.957 回答