iPhone添加惯性/动量物理以动画“命运之轮”,如旋转控制

时间:2012-03-08 20:56:06

标签: iphone objective-c ios animation rotation

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

Example rotary control

Rotary control sample project

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

我感兴趣的是如何根据手指行进的距离/速度计算界面元素应滚动/旋转的距离。不同类型的“轻弹”会通过将“动量”转移到方向盘而产生不同的行为。有人可以提出这种计算的例子吗?

我特别感兴趣的是将相同的惯性概念应用于如下所述的自定义旋转控制:Rotary control on stack overflow。当前示例,甚至示例中提到的转换器应用程序都不使用惯性。车轮只需跟随手指即可锁定到预定位置。我想让类似的车轮感觉它有真正的质量,所以它可以被轻弹并以可预测的方式旋转,直到顺利停止。 (想想“幸运之轮”式表示)。

我怎样才能在旋转控制中实现这种“命运之轮”基于惯性的行为,使控制感觉它具有实际质量呢?

谢谢!

2 个答案:

答案 0 :(得分:8)

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

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

此外,您可以简单地使用它取决于手势的速度(比计算力更容易,因为它需要质量和加速度),而不是计算力。因此,我们可以想象更快的触摸将对应更大的动量。

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

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

为了获得减速效果,您必须假设,当车轮移动时,始终存在相反的扭矩。您可以在编译时定义它,或者使其取决于您的车轮宽度(这样更大的车轮会更快地减速)。

现在你已经拥有了所有你需要的东西......祝你好运:)

答案 1 :(得分:2)

我发现使用iCarousel,可以创建一个具有惯性/动量的控制轮!