我的桌面应用程序中有一个页面,并且我实现了简单的抓取和平移。它工作得很好。
当您以这种方式平移并释放时,页面会在您放置它的地方停止。
我希望它以某种势头稍微继续,并最终停止。我猜这更像是 iPhone UI 中的“投掷”。
我并不是真的在追求完美,只是一种能够“扔”那个页面的非常粗略的简单感觉。
我的桌面应用程序中有一个页面,并且我实现了简单的抓取和平移。它工作得很好。
当您以这种方式平移并释放时,页面会在您放置它的地方停止。
我希望它以某种势头稍微继续,并最终停止。我猜这更像是 iPhone UI 中的“投掷”。
我并不是真的在追求完美,只是一种能够“扔”那个页面的非常粗略的简单感觉。
您可以通过跟踪位置来计算运动的速度。由于缺乏精确性,并且出于平滑的原因,您将希望平均最后的多个位置,假设它们是在彼此相隔几乎均匀的时间范围内进行的。
一旦你得到了这些的平均值,你就可以根据你想要的效果显示多少来调整你的速度。计算出平均值后,只需在平均值上添加一个常数乘数。
从这里开始,您将以这个速度移动窗口,降低速度直到它达到 0。降低的速度还取决于个人喜好。如果您希望窗口移动更长的时间,您将以比您希望它更快停止的速度更慢的速度降低速度。
如果您想要“反弹”效果,只需检查窗口何时碰到屏幕的一侧。如果它撞到左侧或右侧(即 WindowX <= 0 或 WindowX + WindowWidth >= ScreenWidth),则将 X 速度乘以 -1 以将其发送到另一个方向。Y轴也是如此。如果你不添加“反弹”效果,我建议至少做同样的检查,但是当它碰到屏幕的一侧时,你强制它回到屏幕中(即 WindowX >= 0 和 WindowX <= ScreenWidth - WindowWidth) 将速度设置为 0,完全停止动画。
我也建议您在最大速度上添加一个上限(即在 -x 和 x 单位之间)。这将防止“某事”发生并且速度最终达到一个疯狂的数字,并且屏幕以每小时一百万英里的速度弹跳的奇怪情况。
除了位置之外,只需跟踪页面的当前速度。当用户释放时,将速度设置为您平移的最后一个量。然后,在随后的帧中,继续以当前速度平移,并将当前速度降低某个固定量(幅度),直到它达到零。