0

我正在尝试制作一个类似于“Contre Jour”游戏的菜单,当用户左右拖动时,3 个元素会旋转一圈。我正在使用带有 CATransforms 的 CALayers 将它们定位在 3d 旋转轮中(到目前为止没有问题)。

我需要一种方法(也许使用 NSTimers?)来计算中间值,因为 CoreAnimation 只是插入值,但如果你 NSLog 它们,它只会显示开始和结束,或者只是结束。我需要所有中间值,当我在一个位置(有 3 个元素,每个元素应该是 120 度)释放手指(触摸末端)时,我需要捕捉轮子的移动。

4

4 回答 4

0

查看 CADisplayLink。这与 NSTimer 非常相似,只是它的刷新率与显示器的刷新率相关,因此您的动画将比使用计时器更流畅。这将允许您计算所有中间值并更新您的控件。

于 2013-02-22T23:43:29.047 回答
0

我的猜测并且我很确定我是正确的,他们正在使用诸如 Unity3D 或 Cocos2D 之类的游戏引擎或许多其他引擎来管理他们的精灵、动画、纹理、物理以及基本上所有内容。试图在游戏引擎之外复制它很可能会导致糟糕的性能和大量的头发拉扯。我建议研究一个专门的游戏引擎并在那里试一试。

于 2013-02-22T22:13:50.137 回答
0

我不确定我是否完全理解 Contre Jour 对纺纱机的作用,无论如何,我认为对您的情况而言,一种合理的方法是使用 aUIPanGestureRecognizers根据平移来更新纺车的状态。

现在,尚不清楚您要为纺车设置动画效果(如果您可以提供一些代码,这将有助于准确理解您要做什么),但想法是这样的:而不是远距离指定动画结束点远离起点(让 Core Animation 为您完成所有处理,即使拖动已停止),您只会以较小的增量修改旋转轮的状态。

如果您唯一的问题是在拖动停止时停止动画,您可以尝试调用 removeAnimationForKey您的图层以停止特定动画。

于 2013-02-22T22:25:30.023 回答
0

我不清楚您在问什么,但我确实对您有一个见解:要获取飞行中动画的中间值,请查询图层的 presentationLayer 属性。正在动画的属性将具有一个非常接近您获取该值时它在屏幕上的外观的值。

于 2013-02-23T21:19:37.670 回答