iPhone add inertia/momentum physics to animate “wheel of fortune” like rotating control
我正在尝试创建一种新的旋转控件,其外观和感觉就像一个真正的大轮子支撑在一个销上,能够以一定程度的阻尼围绕它的中心点旋转,这将最终使车轮停下来。想想”命运之轮”。
旋转控制示例项目
当使用原生 UITableView 和/或 UIScrollView 时,它们可以在一个方向上”轻弹”并继续在该方向上滚动一段时间。我知道动画曲线可以达到类似的效果。
我感兴趣的是如何根据手指移动的距离/速度计算界面元素应该滚动/旋转的距离。不同类型的”轻弹”通过将”动量”转移到轮子上会产生不同的行为。任何人都可以提出这种计算的例子吗?
我对将相同的惯性概念应用于自定义旋转控件特别感兴趣,如下所述:堆栈溢出时的旋转控件。当前的示例,甚至示例中提到的 convertbot 应用程序都没有使用惯性。滚轮简单地跟随手指并捕捉到预定义的位置。我想让一个类似的轮子感觉它有真正的质量,所以它可以轻弹并以可预测的方式旋转,直到平稳停止。 (想想”命运之轮”式显示)。
我怎样才能为旋转控件实现这种基于惯性的”命运之轮”行为,让控件感觉像是拥有真正的质量?
谢谢!
实现一个完全真实的质量效果并不是那么简单,而且可能需要太多的工作(尤其是对于这样一个简单的任务),因此我会忽略物理定律(除了那些严格需要的)并让一切变得更简单.
动量是
此外,您可以简单地使其取决于手势的速度,而不是计算力(比计算力更容易,因为它需要质量和加速度)。因此,我们可以想象更快的触摸将对应更大的动量。
当然,手势永远不会是完全水平或垂直的,因此您可以假设每次都施加两个扭矩:第一个对应于垂直运动,第二个对应于水平运动。
您可以获得手势速度,您可以简单地计算触摸的初始位置和最终位置,然后将它们的差除以经过的时间。
要获得减速效果,您必须假设,当车轮移动时,始终存在相反的扭矩。您可以在编译时定义它或使其取决于轮子的宽度(这样较大的轮子会更快地减速)。
现在你几乎拥有了你所需要的一切……祝你好运:)
我发现使用 iCarousel,可以创建一个带有惯性/动量的轮状控件!
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/268644.html