我制作动画并让它永远运行。现在我想点击一个按钮后停止它。然后动画将按钮的图像从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"];
谢谢!
答案 0 :(得分:2)
虽然您可以使用animationForKey:
从图层获取动画,但您无法以这种方式修改动画。正如文档所解释的那样:
的讨论强>尝试修改返回对象的任何属性将导致未定义的行为。
您必须删除无限动画并添加另一个动画以制作最终结束动画。
在动画期间,您的模型不会更改(使用Core Animation时)。相反,您在屏幕上看到的是图层表示层。然后,您可以从表示层读取当前值,就像它是任何其他层一样。在您的情况下,您可以使用[myLayer valueForKey:@"transform.rotation"];
答案 1 :(得分:2)
或者,您可以创建一个带有完成方法的动画,该方法在无限循环中再次触发动画。
让完成例程在提交重复之前检查一个标志。
如果标志为false,请不要再次触发动画。
然后让你的按钮操作只需将repeat标志设置为false。当前动画将运行完成,然后不会重复。