0

我正在使用一个简单的 CABasic 动画来旋转视图中的图像。当用户触摸图像时,会调用 touches started 以允许开始旋转。当用户完成旋转图像时,将调用 Touches Ended。

一旦触摸结束,我就会再次将图像旋转到固定点。这是代码

CABasicAnimation *rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];

double startRotationValue = 0;
rotation.fromValue = [NSNumber numberWithDouble:startRotationValue];
rotation.toValue = [NSNumber numberWithDouble:startRotationValue+0.25];
rotation.duration = 1.0;
rotation.fillMode = kCAFillModeForwards;
rotation.removedOnCompletion = NO;

[self.view.layer addAnimation:rotation forKey:@"rotating"];

在第二次选择图像之前,这可以正常工作。再次调用 Touches started 但图像无法旋转。事实上,图像根本无法移动,我知道这与它有关

rotation.fillMode = kCAFillModeForwards;
rotation.removedOnCompletion = NO;

我曾尝试在 Touches 开始时调用 removedOnCompletion,但这并不能解决问题。

rotation.removedOnCompletion = YES

这里最好的方法是什么,View 没有正确注册 rotation.removedOnCompletion。

4

1 回答 1

1

首先,您通常不应该混淆fillModeand removedOnCompletion。完全删除这些。那些告诉你惹他们的人几乎总是在解决错误的问题。

他们要解决的问题是,当动画完成并被移除时,对象会“弹回”到其旧位置。原因是您从未真正在模型上设置值。这会在以后产生各种烦人的小问题。

在这一行之后:

[self.view.layer addAnimation:rotation forKey:@"rotating"];

添加:

self.view.layer.transform.rotation = startRotationValue + 0.25;

(您可能必须在这里使用一个临时变量来保存transform,修改它,然后将其设置回来。我自己通常不使用该rotation属性。)

这将设置底层模型层,使其与动画的最终状态相匹配。

于 2012-04-04T02:43:54.580 回答