我希望能够预测UIScrollView在快速滑动手势后的最终停靠位置偏移量。它不需要像素级别的准确度,但足够接近以便用户感知不到差异(即它的移动量不会过多或过少)。
我知道有人会问:为什么要这样做呢?因为我在UIScrollView中有一个类似于表格视图的菜单控件。我想使其最上面的项完全显示,并与UIScrollView顶部齐平。UIScrollView的分页特性并不完全符合我的需求,因为强烈的滑动手势不能超过视图边界的倍数。
处理正常的触摸事件相当容易。在touchesEnded:withEvent:
中,我可以滚动到最近的完整菜单项。难点在于减速。
有两个常量用于减速率:UIScrollViewDecelerationRateNormal
和UIScrollViewDecelerationRateFast
。它们的值在iPhone OS 3.0中分别为0.998和0.990。我试图弄清楚苹果在减速时所使用的数学方法,但是一无所获。
如果我能够相当准确地预测出最终的停靠位置偏移量,那么在减速期间的早期阶段,我就可以简单地使用scrollRectToVisible:animated:
来移动到一个与视图边界顶部齐平的偏移量。
有没有数学方面的人知道苹果在减速时可能所采用的方法?我是否应该收集大量的减速事件数据,绘制它们的图形,并得出一个接近的结果呢?