即使滚动到最后,如何使ScrollView消耗触摸事件?

时间:2019-05-21 10:55:38

标签: ios swift uiscrollview touch stackview

我有一个FSPagerView,其中有一个包含可滚动条形图的项目(scrollview具有多个stackview)。当我滚动条形图时,如果有可滚动的空间,则触摸事件会被条形图消耗,并且会滚动。如果一侧没有可滚动的空间,并且我不断滚动到触摸条形图的那一侧,它不再消耗触摸事件,而是整个FSPagerView滚动。即使在这种情况下,如何使scrollview消耗触摸事件?简而言之,我不想在触摸条形图时滚动FSPagerView

这是一个视频: https://streamable.com/kuxta

3 个答案:

答案 0 :(得分:0)

您可以尝试操纵UIScrollView的手势识别器:

scrollView.panGestureRecognizer

我从未使用UIScrollView的panGestureRecognizer对其进行过测试,但通常的想法是 向FSPagerView添加一个手势识别器,并设置识别器和panGestureRecognizer之间的关系(使用UIGestureRecognizer的委托),以防止其触发

答案 1 :(得分:0)

您可以使用require(toFail:)方法确定两个滚动视图中的UIGestureRecognizer的优先级。

这是我尝试的代码:

scrollView.panGestureRecognizer.require(toFail: collectionView.panGestureRecognizer)

我不知道这是否正是您要的东西。 collectionView.panGestureRecognizer一旦检测到某些内容,滚动视图就不会滚动。

答案 2 :(得分:0)

FSPagerView公开了panGestureRecognizer,本质上是基础UICollectionView的{​​{1}}。

我认为您可以在看到条形图时将其禁用。

panGestureRecognizer不太熟悉,但是我认为您可以通过监视FSPagerView回调来检测您在哪个页面中。例如,如果条形图位于第一页(即index == 0),则可能可以执行以下操作。

FSPagerViewDelegate

如果该回调不起作用,我将使用override func pagerView(_ pagerView: FSPagerView, willDisplay cell: FSPagerViewCell, forItemAt index: Int) { // FSPagerView's gesture recognizer is only enabled for index > 0. pagerView.panGestureRecognizer.isEnabled = (index != 0) } 回调尝试相同的事情。