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

Ale*_*one 4 iphone animation objective-c rotation ios

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

旋转控制示例

旋转控制样本项目

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

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

我特别感兴趣的是将相同的惯性概念应用于如下所述的定制旋转控制:堆栈溢出的旋转控制.当前示例,甚至示例中提到的转换器应用程序都不使用惯性.车轮只需跟随手指即可锁定到预定位置.我想让类似的车轮感觉它具有真正的质量,因此它可以被轻弹并且将以可预测的方式旋转直到平稳停止.(想想"幸运之轮"式表示).

我怎样才能实现这种"命运之轮"基于惯性的旋转控制行为,使控制感觉它具有真正的质量?

谢谢!

Man*_*lio 8

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

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

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

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

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

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

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