如何使滚动视图在其上拖动时停止移动并立即恢复已经接触的手指的移动?

时间:2018-08-13 18:45:30

标签: ios uiscrollview touch gesture uipangesturerecognizer

如何在滚动视图上拖动时使其停止移动,此后,如何在手指已经触摸滚动视图时立即开始滚动?

self.scrollView.notMovingWhileDragging()
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
    self.scrollView.resumeMovingForTheAlreadyTouchingFinger()
}

对于上述两个功能,我先将isScrollEnabled设置为false,然后再设置true,但是如果在调用上述回调时手指已经触摸了滚动视图,滚动视图将不会移动。

我想要的结果就像iOS Maps应用程序一样,当工作表位于顶部时,滚动视图被拖到顶部一点距离。现在我开始向下拖动滚动视图,向下滚动视图,当滚动视图从顶部滚动到顶部时,然后继续向下拖动,将页面向下(滚动视图在拖动时停止移动),然后向上拖动,向上视图当工作表视图位于顶部时,继续向上拖动,滚动视图将再次开始滚动(滚动视图在手指已经位于其上时继续移动)。

1 个答案:

答案 0 :(得分:0)

不可能。 isScrollEnabled的{​​{1}}属性仅更新UIScrollView的{​​{1}}的{​​{1}}属性。 isEnabled有一个已定义的生命周期,从UIScrollView开始着陆。并且其状态移至panGesture,因此在开始触摸时启用它不会触发。

在您最初的问题中,您询问了处理Apple Maps的图纸样式界面的位置后如何允许滚动。这可以通过在滚动视图的UIPanGesture中添加目标来完成。例如,您可以添加诸如touchesBegan的目标;然后您可以在行动中说出类似的话:

.began

这将使平移达到某个阈值,然后滚动:

enter image description here