iPhone添加惯性/动量物理animation,像旋转控制一样为“命运之轮”创造动力

我试图创造出一种新型的旋转控制装置,它具有一个支撑在一个销上的真正巨大的轮子的外观和感觉,能够以一定程度的阻尼围绕它的中心点旋转,这最终会使轮子停下来。 想想“财富之轮”。

示例旋转控制

旋转控制样本项目

当使用本机UITableView和/或UIScrollView时,可以在一个方向上“轻弹”,并继续在该方向上滚动一段时间。 我知道用animation曲线可以达到类似的效果。

我感兴趣的是如何根据手指的距离/速度来计算界面元素应该滚动/旋转的距离。 不同types的“轻弹”会通过将“动力”转移到车轮上而产生不同的行为。 任何人都可以提出这种计算的例子?

我特别感兴趣的是将相同的惯性概念应用于自定义旋转控制,如下所述: 堆栈溢出的旋转控制 。 目前的例子,甚至在例子中提到的convertbot应用程序不使用惯性。 轮子简单地沿着手指并且卡扣到预定位置。 我想制作一个类似的车轮感,就像它有真正的质量,所以它可以轻弹,并将以可预见的方式旋转,直到平稳停止。 (认为​​“命运之轮”式显示)。

我怎样才能达到这种“命运之轮”惯性为基础的旋转控制行为,将使控制感觉像它真正的质量?

谢谢!

实现一个完全现实的质量效应并不是微不足道的,也许需要太多的工作(特别是对于这样一个简单的任务),因此我会忽略物理定律(除了那些严格需要的),并使一切变得简单。

动量是rx F ,其中r是半径, F是施加的力。 由于它取决于半径,离车轮中心越远,动量就越大。 让我们忽略它,假设力是相切的,并且总是在r = wheelWidth / 2处应用

除了计算力外,还可以简单地取决于手势的速度(比计算力更容易,因为它需要质量和加速度)。 因此,我们可以认为,一个更快的触摸将对应一个更大的动力。

当然,手势永远不会完全水平或垂直,因此可以假设每次施加两个扭矩:第一个对应于垂直运动,第二个对应于水平。

您可以获得手势速度,您可以简单地计算触摸的初始位置和最终位置,并将其差异除以所经过的时间。

为了达到减速的效果,你必须假设,当车轮移动时,总会有相反的转矩。 您可以在编译时定义它,也可以根据车轮的宽度来确定它(例如,较大的车轮会更快地减速)。

现在你有几乎所有你需要的…祝你好运:)

我发现使用iCarousel ,可以创build一个像惯性/动量控制的轮子!