减速后预测UIScrollView中的静止偏移量

Ste*_*sen 25 cocoa-touch uiscrollview

我希望能够在轻弹手势后预测UIScrollView中的最终静止偏移.它不需要像素精确,但足够接近使得用户不会感觉到差异(即,它不会比他们习惯的那样移动得过多或过多).

我知道有人会问,所以:为什么?我在UIScrollView中有一个类似于表视图的菜单控件.我想这样做,以便最顶层的菜单项完全显示并刷新到UIScrollView的顶部.UIScrollView的分页功能并不是我想要的,因为强大的轻弹不会超过视图范围的倍数.

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

减速率有两个常数,UIScrollViewDecelerationRateNormalUIScrollViewDecelerationRateFast.它们在iPhone OS 3.0中的值为0.998和0.990.我试图弄清楚苹果用来减缓运动的数学运算,但我现在空了.

如果我可以准确地预测最终的静止偏移,那么在减速期间的早期我可以简单地使用scrollRectToVisible:animated:移动到偏移,其中菜单项齐平到视图边界的顶部.

有没有数学倾向的人知道苹果在减速期间可能会做些什么?我应该收集一堆减速事件,绘制它们并提出一些接近的东西吗?

Sam*_*Sam 15

在iOS 5中控制UIScrollView的targetContentOffset

iOS5 UIScrollViewDelegate有一种新方法:scrollViewWillEndDragging:withVelocity:targetContentOffset:.

这非常适合您想要做的事情.

当滚动视图的pagingEnabled属性的值为YES时,不会调用此方法.您的应用程序可以更改targetContentOffset参数的值,以调整scrollview完成其滚动动画的位置.

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

UIScrollView's 更改decelerationRateUIScrollViewDecelerationFast,然后scrollViewDidEndDecelerating移至最近的"页面".

快速减速使完全停止/滑动更自然/更不讨厌.