是否有可能在结束减速之前知道最终的UIScrollView contentOffset?

时间:2011-12-31 02:19:15

标签: iphone objective-c ios ipad

当用户“轻弹”一个UIScrollView,导致它以动量滚动时,有没有办法在减速结束前找出最后的contentOffset

基本上,我想知道最终contentOffset来自scrollViewDidEndDragging:willDecelerate:而不是scrollViewDidEndDecelerating:

有一个名为decelerationRate的浮动属性,它可能是这个难题的一部分,但我还没弄清楚如何处理它。

PS:我将pagingEnabled设置为YES。在iOS 5中,实际上有scrollViewWillEndDragging:withVelocity:targetContentOffset:,但是文档说如果pagingEnabledYES

,则不会被触发

2 个答案:

答案 0 :(得分:7)

我注意到max contentOffset可以从头开始计算,它只是scrollview contentSize和scrollview框架大小之间的差异。 我像这样在 y 上计算了它。 maxOffsetY = scrollView.contentSize.height - scrollview.frame.size.height;

答案 1 :(得分:2)

可能有更好的方法,但我会尝试这个:

  1. 实现委托的scrollViewDidScroll:方法并获取此方法被调用的前两次的contentOffsets(当然它们必须存储在方法之外)。

  2. 获取内容偏移的两个读数之间的差异;这将是你的delta。

  3. 现在你可以使用delta作为你的滚动的当前速度和你的减速率来计算在delta变为0之前它将滚动多少。这个值+ - (取决于滚动节制)的第二个读数内容偏移量将是您的“目标滚动偏移量”。

  4. 请确保在应用之前检查滚动视图实际上正在减速,并检查以确保您的最终计算在内容大小方面不是“超出范围”。

    希望这会有所帮助