2011-01-05 39 views
3

我是新来的核心animationI我在以前的文章中立足这一点:spin image clockwise/anticlockwise on touchiPhone/iPad的微调,以保持动画

可能是一个基本的问题,但我只是想圆旋转一定的距离,然后停止。当动画结束时,它将恢复到原始位置。

如何让项目保留在动画结束时的位置?


我真正想要的是自由浮动的轮子响应用户刷卡。当用户向车轮左侧滑动时,车轮旋转到左侧。根据刷卡的速度,车轮旋转更快,然后开始减速。如果有人能够就此提出一些提示或指示,我会非常感激。 alt text

+5

这是你在那里创建的一个令人敬畏的微调。 :) – 2011-01-05 17:04:45

回答

3

这是混乱与核心动画公共点。 A CAAnimation实际上并未更改图层的后备“模型”属性。它只是改变了图层对用户的显示方式。所以你的toValue从来没有设置在你的图层上,你需要自己做。您可以在动画开始之前或之后执行此操作。您的新值将被设置,但用户在动画结束之前不会看到它。一个人为的例子:

CABasicAnimation *rotate = [CABasicAnimation animationWithKeyPath:@"transform"]; 
rotate.fromValue = [NSValue valueWithCATransform3D:myLayer.transform]; 
rotate.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(myLayer.transform, M_PI, 0.f, 0.f, 1.f)]; 
rotate.duration = .5f; 

myLayer.transform = CATransform3DRotate(myLayer.transform, M_PI, 0.f, 0.f, 1.f); 
[myLayer addAnimation:rotate forKey:@"transform"]; 

两个重要的部分是设置在该层上的性质和使用该属性名作为在addAnimation:forKey:键。不要担心隐式动画。在内部,CALayer将其所有动画保存在以属性名称为关键字的字典中,并且当您添加新动画时,它将取消并替换指定键/属性的任何现有动画。

此外,我不能告诉你是否需要滑动手势的帮助,但如果你还没有,你应该检查出UIPanGestureRecognizer。它提供了一个方便的方法,它将为您提供一个以每秒点数表示的平移方向的二维矢量。我有一些gesture recognizer sample code up on github可能会有所帮助。

+0

那么,你将如何设置图层上的旋转。在这里,你正在设置不透明度。如果你在PanGesture上有一些示例代码,那就太好了。 – smcdrc 2011-01-06 03:18:28

+0

我以为你刚刚在最后动画复原时遇到了麻烦。你可以使用'transform'属性来代替'opacity'。我编辑我的示例来旋转而不是淡入淡出。我还添加了一些链接到一些手势识别器的例子。 – 2011-01-06 04:12:45

+0

完美,谢谢。我正在四处寻找需要更改的内容,但无法找出设置旋转的位置。 – smcdrc 2011-01-06 13:59:51

2

(顺便说一句,这是一个真棒实现。)

你需要指定两个属性:填充模式和删除完成:

animation.fillMode = kCAFillModeForwards; 

确定接收的 演示文稿被冻结或删除一次 其活动持续时间已完成。 这些常量决定了当定时对象的有效持续时间完成后,定时对象的行为。

animation.removedOnCompletion = NO; 

确定如果动画从目标层的动画 完成后除去 。

从Apple文档:

http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAMediaTiming_protocol/Introduction/Introduction.html

http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAAnimation_class/Introduction/Introduction.html%23//apple_ref/occ/cl/CAAnimation