gpt4 book ai didi

cocoa - 如何停止动画但使其完成当前动画

转载 作者:行者123 更新时间:2023-12-03 16:29:04 25 4
gpt4 key购买 nike

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

谢谢!

最佳答案

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

Discussion

Attempting to modify any properties of the returned object will result in undefined behavior.

你必须做什么

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

  1. 使用表示层来确定图层的当前旋转。
  2. 删除无限动画
  3. 根据从表示层获取的值添加新动画到最终状态。

如何从表示层获取值。

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

获得旋转

关于cocoa - 如何停止动画但使其完成当前动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11822722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com