【发布时间】:2009-10-30 18:35:13
【问题描述】:
我希望能够在轻弹手势后预测 UIScrollView 内的最终静止偏移。它不需要精确到像素,但要足够接近,以便用户不会察觉到差异(即,它不会移动得比他们习惯的少或多)。
我知道有人会问,所以:为什么?我在 UIScrollView 中有一个类似表格视图的菜单控件。我想让最顶部的菜单项完全显示并刷新到 UIScrollView 的顶部。 UIScrollView 的分页功能并不是我想要的,因为强烈的轻弹不会飞过多个视图边界。
处理正常的触摸事件很容易。在touchesEnded:withEvent: 上,我可以滚动到最近的完整菜单项。最困难的部分是减速。
减速度有两个常数,UIScrollViewDecelerationRateNormal 和 UIScrollViewDecelerationRateFast。在 iPhone OS 3.0 中,它们的值为 0.998 和 0.990。我试图弄清楚 Apple 用来减缓移动速度的数学方法,但我一无所获。
如果我可以准确地预测最终的静止偏移量,那么在减速的早期,我可以简单地使用scrollRectToVisible:animated: 移动到一个偏移量,其中菜单项与视图边界的顶部齐平。
有数学倾向的人知道苹果在减速期间可能会做什么吗?我是否应该收集一堆减速事件,绘制它们并得出一些接近的东西?
【问题讨论】:
-
为什么不能使用 UITableView 呢?
-
哦,我明白了——您想在滚动完成后捕捉到最近的菜单项吗?
-
我会注意到,像这样捕捉到菜单项并不是标准的 iOS 行为——破坏用户期望的行为(即使是像这样的微妙方式)可能会令人不快。跨度>