我有一个FSPagerView
,其中有一个包含可滚动条形图的项目(scrollview具有多个stackview)。当我滚动条形图时,如果有可滚动的空间,则触摸事件会被条形图消耗,并且会滚动。如果一侧没有可滚动的空间,并且我不断滚动到触摸条形图的那一侧,它不再消耗触摸事件,而是整个FSPagerView
滚动。即使在这种情况下,如何使scrollview消耗触摸事件?简而言之,我不想在触摸条形图时滚动FSPagerView
。
这是一个视频: https://streamable.com/kuxta
答案 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)
}
回调尝试相同的事情。