我正在尝试做一个类似“Contre Jour”游戏的菜单,当用户左右拖动时,3个元素在一个圆圈中旋转。我正在使用带有CAT变换的CALayers将它们放置在一个3d旋转轮中(到目前为止没问题)。
我需要一种方法(可能有NSTimers?)来计算中间值,因为CoreAnimation只是插值,但是如果你NSLog它们,它只是显示开始和结束,或者只是结束。我需要所有中间值,我需要在一个位置释放手指(触摸结束)时捕捉车轮运动(有3个元素,每个元素应该是120度。
答案 0 :(得分:0)
我的猜测并且我很确定我是正确的是他们正在使用Unity3D或Cocos2D等游戏引擎或其他任何其他游戏引擎来管理他们的精灵,动画,纹理,物理以及基本上所有内容。试图在游戏引擎之外复制它很可能会导致糟糕的性能和大量的头发拉动。我建议调查一个专用的游戏引擎并在那里试一试。
答案 1 :(得分:0)
我不确定我是否完全了解Contre Jour对旋转器的作用,无论如何,我认为合理的方法是使用UIPanGestureRecognizers
根据平移更新旋转轮的状态。
现在,不清楚你要做什么来动画旋转轮(如果你能提供一些代码,这将有助于准确理解你想要做什么),但想法是这样的:而不是指定一个动画终点远离起点(让Core Animation为你完成所有处理,即使拖动已经停止),你只能以小增量修改旋转轮的状态。
如果您的唯一问题是在拖动停止时停止动画,您可以尝试在图层上调用removeAnimationForKey
来暂停特定动画。
答案 2 :(得分:0)
了解CADisplayLink。这非常类似于NSTimer,除了它的刷新率与显示器的刷新率相关联,因此您的动画将比使用计时器更平滑。这将允许您计算所有中间值并更新您的控件。
答案 3 :(得分:0)
我不清楚你在问什么,但我确实对你有一个见解:要获得飞行中动画的中间值,请查询图层的presentationLayer属性。正在设置动画的属性的值将与您获取值时的屏幕外观非常接近。