如何沿弯曲路径拖动,折腾,动画视图

时间:2009-08-18 19:52:29

标签: iphone cocoa cocoa-touch core-animation

我有一个基于视图的iPhone应用程序。目前屏幕左上角有一个小图像。当用户点击屏幕时,使用CAKeyframeAnimation沿着曲线路径向屏幕右下角动画显示图像。

现在我想更改应用程序,而不是在点击事件上设置动画,用户可以沿着动画路径拖动图像。基本上当用户向右向下拖动时,动画向前移动,当用户向上或向左拖动时,动画向后退。在触摸结束事件中,我希望图像继续沿着拖动方向沿路径设置动画。

我知道如何阅读拖动事件,但我不知道开始/停止/恢复动画或跳到动画中的特定阶段。看起来我需要重新开始并使用CAKeyframeAnimation之外的其他东西。如果是这样,我该如何重新开始?

非常感谢!

2 个答案:

答案 0 :(得分:1)

不幸的是,没有办法将CAAnimation设置为中途启动。

您需要在用户拖动时沿路径手动移动图像,然后在用户完成拖动后使用剩余路径创建新的CAAnimation。

答案 1 :(得分:0)

Mark F是正确的。在玩游戏时我遇到了类似的问题。我想从完全重新启动动画暂停它们。

我能想到的最简单的解决方案是捕捉开始时间:

    mStartTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];

然后,当动画停止时,获取停止时间并计算偏移量:

    CFTimeInterval stopTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];;
    mTimeOffset += stopTime - mStartTime;

使用mTimeOffset,我会计算一组不同的关键时间:

- (NSArray *)keyTimesWithOffsetTime:(CFTimeInterval)offsetTime;

基于此,我会得到一个不同的动画起始帧。 “框架”是指关键帧动画的任何部分。

这样做有点痛苦,但确实有效。我很想知道使用cocos2d的游戏如何处理暂停和恢复。必须有一个更简单的方法。

关于沿着路径的动画,似乎你已经没事了。如果没有,请查看本教程:

Core Animation: Paths