CABasicAnimation旋转

时间:2012-04-04 00:35:17

标签: iphone ios

我使用简单的CABasic动画来旋转视图中的图像。当用户触摸图像时,调用开始触摸以允许旋转开始。然后在用户完成旋转图像时调用“结束”。

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

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"];

这样可以正常工作,直到第二次选择图像。触摸开始再次调用,但图像无法旋转。事实上,图像根本无法移动,我知道它与

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

我试图在Touches中调用removedOnCompletion,但这并没有解决问题。

rotation.removedOnCompletion = YES

这里有什么最好的方法,不管怎么说View都没有正确注册rotation.removedOnCompletion。

1 个答案:

答案 0 :(得分:1)

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

他们想要解决的问题是,当动画完成并被删除时,对象会“快速”回到其旧位置。原因是你从未在模型上实际设置值。这会在以后产生各种令人烦恼的问题。

这一行之后:

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

添加:

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

(您可能必须在此处使用临时变量来保存transform,修改它,然后将其重新设置。我通常不会自己使用rotation属性。)

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