我希望能够在轻拂手势后预测UIScrollView中的最终静止偏移量。它不需要精确到像素,但要足够接近以至于用户不会察觉到差异(即,它的移动幅度不会比他们习惯的少或多)。

我知道有人会问,为什么:为什么?我在UIScrollView中有一个类似于表 View 的菜单控件。我要使其完全显示最上面的菜单项,并刷新到UIScrollView的顶部。 UIScrollView的分页功能不是我想要的,因为强烈的滑动不会越过 View 范围的倍数。

处理正常的触摸事件非常容易。在touchesEnded:withEvent:上,我可以滚动到最近的完整菜单项。困难的部分是减速。

减速速率有两个常量UIScrollViewDecelerationRateNormalUIScrollViewDecelerationRateFast。在iPhone OS 3.0中,它们的值分别为0.998和0.990。我试图弄清楚苹果用来减慢运动速度的数学方法,但是我却一无所获。

如果我可以一定的精度预测最终的静止偏移量,那么在减速的早期,我可以简单地使用scrollRectToVisible:animated:移到偏移量,并且菜单项齐平到 View 边界的顶部。

有数学倾向的人是否知道苹果在减速期间会做什么?我是否应该收集大量减速事件,将它们绘制成图表并提出一些接近的结果?

最佳答案

在iOS 5中控制UIScrollView的targetContentOffset

iOS5 UIScrollViewDelegate 有一个新方法: scrollViewWillEndDragging:withVelocity:targetContentOffset:

这非常适合您要执行的操作。



iOS4和更低版本的替代解决方案

UIScrollView decelerationRate 更改为 UIScrollViewDecelerationFast ,然后在 scrollViewDidEndDecelerating 中移至最近的“页面”。

快速的减速使整个停止/滑行更加自然/不那么令人讨厌。

关于cocoa-touch - 减速后预测UIScrollView中的静止偏移量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1651560/

10-15 00:04