预测休息减速后在一个UIScrollView偏移(Predicting the resting of

2019-09-02 19:16发布

我想能够预测最后的安息滑动手势后,一个UIScrollView内的偏移。 它并不需要是像素精确的,但足够接近,使用户不会感觉到差别(即它不会过分少动或超过它们被用来)。

我知道有人会问,那么:为什么呢? 我有一个UIScrollView内的表视图类似菜单控制。 我想使它使得最上面的菜单项得到充分的展示,并刷新到的UIScrollView的顶部。 UIScrollView的分页功能是不是很我想要的,因为一抖不飞了过去的看法边界的倍数。

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

有两个常量,减速度, UIScrollViewDecelerationRateNormalUIScrollViewDecelerationRateFast 。 它们的值是0.998和0.990的iPhone OS 3.0。 我曾试图弄清楚,苹果使用慢运动的数学,但我来了空。

如果我能有一定的准确性最后的安息偏移预测,然后在减速过程中的早期,我可以简单地使用scrollRectToVisible:animated:移动到一个菜单项到视图边界的顶部齐平偏移。

做任何数学倾斜人们知道苹果有可能在减速过程中在做什么? 我应该收集了一堆减速事件的数字,图形他们拿出了接近?

Answer 1:

控制UIScrollView的targetContentOffset iOS 5中

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

这与你想要做什么完全适合。

这种方法不叫当滚动视图pagingEnabled属性的值是YES。 应用程序可以改变targetContentOffset参数进行调整,其中滚动视图完成其滚动动画的价值。

为iOS4的和较低的替代解决方案

变化UIScrollViewdecelerationRateUIScrollViewDecelerationFast ,然后在scrollViewDidEndDecelerating移动到最近的‘页’。

快速减速使完全停止/滑过多一点自然/更少讨厌。



Answer 2:

You could watch the speed of scrolling while the UIScrollView is decelerating, and when the speed falls beneath a certain value, snap to the nearest menu item.

You will likely want to implement the UIScrollViewDelegate methods scrollViewDidEndDragging:willDecelerate: and scrollViewDidScroll:. When the user lifts their finger to finish a scroll gesture, scrollViewDidEndDragging:willDecelerate: will be called. Begin monitoring the scrollViewDidScroll: events, and watch the delta between the UIScrollView's current position and its previous position, divided by the time delta:

float velocity = (currentPosition - lastPosition) / (currentTime - lastTime);

When the velocity falls below a minimum value, call scrollRectToVisible:animated: on the UIScrollView.



Answer 3:

我不能评论(我想我需要50声望),所以这不是一个完整的答案,但减速给出的0.998至0.990值,我的直觉是,他们根本乘以减速率每帧当前速度。



文章来源: Predicting the resting offset in a UIScrollView after deceleration