当用户“轻弹”一个UIScrollView
,导致它以动量滚动时,有没有办法在减速结束前找出最后的contentOffset
?
基本上,我想知道最终contentOffset
来自scrollViewDidEndDragging:willDecelerate:
而不是scrollViewDidEndDecelerating:
有一个名为decelerationRate
的浮动属性,它可能是这个难题的一部分,但我还没弄清楚如何处理它。
PS:我将pagingEnabled
设置为YES
。在iOS 5中,实际上有scrollViewWillEndDragging:withVelocity:targetContentOffset:
,但是文档说如果pagingEnabled
为YES
答案 0 :(得分:7)
我注意到max contentOffset可以从头开始计算,它只是scrollview contentSize和scrollview框架大小之间的差异。 我像这样在 y 上计算了它。 maxOffsetY = scrollView.contentSize.height - scrollview.frame.size.height;
答案 1 :(得分:2)
可能有更好的方法,但我会尝试这个:
实现委托的scrollViewDidScroll:方法并获取此方法被调用的前两次的contentOffsets(当然它们必须存储在方法之外)。
获取内容偏移的两个读数之间的差异;这将是你的delta。
现在你可以使用delta作为你的滚动的当前速度和你的减速率来计算在delta变为0之前它将滚动多少。这个值+ - (取决于滚动节制)的第二个读数内容偏移量将是您的“目标滚动偏移量”。
请确保在应用之前检查滚动视图实际上正在减速,并检查以确保您的最终计算在内容大小方面不是“超出范围”。
希望这会有所帮助