在UIScrollView中检测突然滚动停止

时间:2012-07-01 14:10:39

标签: ios uiscrollview uiscrollviewdelegate

我想知道如何使用UIScrollViewDelegate来检测滚动视图何时突然停止移动,因为用户在从快速平移启动动量后触摸并保持屏幕。

scrollViewDidEndDecelerating:方法仅在用户抬起手指时触发上述情况。但是,如果用户在滚动视图动量期间轻敲并保持,则此方法不会触发(直到他们抬起手指)。当滚动视图在用户触摸时停止时,是否仍然可以拦截这个?

3 个答案:

答案 0 :(得分:4)

您是否尝试过使用scrollViewWillBeginDragging?或者(由于文档表明scrollViewWillBeginDragging可能无法立即触发),您可以尝试使用scrollViewDidScroll并检查用户当前是否正在触摸滚动视图......

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if(scrollView.isTracking){
        //do something
    }
}

答案 1 :(得分:2)

好吧,你可以在用户开始滚动时引发一个标志,该标志以scrollViewDidEndDecelerating结束。这样,如果用户在清除标志之前再次开始滚动,您将知道他们在减速期间触摸了它。

答案 2 :(得分:0)

您不必自己实现。

我们的朋友Apple已经为您提供了检测情况的方法。

如果需要更多信息,请参考此处的指南:https://developer.apple.com/documentation/uikit/uiscrollviewdelegate/1619436-scrollviewdidenddragging

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    if decelerate {
      print("true if scrolling stops, keeping touch on the screen!")
    } else {
      print("false if scrolling stops, detaching touch on the screen")
    }
}