iphone - CABasic动画旋转

标签 iphone ios

我正在使用简单的 CABasic 动画在 View 中旋转图像。当用户触摸图像时,将调用 Touches begin 以允许开始旋转。当用户完成旋转图像时调用 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"];

在第二次选择图像之前,此方法工作正常。再次调用开始触摸,但图像无法旋转。事实上,图像根本无法移动,我知道这与

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

我尝试在 Touches begin 中调用removedOnCompletion,但这并不能解决问题。

rotation.removedOnCompletion = YES

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

最佳答案

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

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

此行之后:

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

添加:

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

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

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

关于iphone - CABasic动画旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10003411/

相关文章:

ios - iPhone 模拟器 watch 应用程序图标丢失?

iphone - 无法创建持久存储协调器

ios - CLLocationManager弹出窗口

iphone - reloadData 没有被调用

ios - 带有自定义标题的 UICollectionView

iphone - 在 View 弹出之前存储 UITextField 内容

ios - 您的应用未针对 iphone 5 进行优化

php - 运行 REST API 的最快方法 - 使用任何开源工具

iphone - iOS 开发 : How can I animate the addition/removal of form controls in a view?

ios - 我如何 NSLog 一个 NSDate?