防止UIPageViewController的滑动影响UISlider

4
我看到过类似的问题,但是其他答案都不适用于我的情况。我有一个UIPageViewController,其中包含一个包含UISlider的子视图控制器。
当您尝试移动滑块时,它会激活页面视图控制器的滚动。您必须点击、暂停在滑块圆圈上,然后移动。
UIPageViewController设置为滚动类型,因此手势识别器未设置(标题状态为“仅在转换样式为'UIPageViewControllerTransitionStylePageCurl'时填充”)。因此,我甚至无法正确访问手势。
我已经尝试了几种方法来防止UIPageViewController影响滑块,但都没有成功。我尝试过: 1)遍历子树并将UIScrollView的pan手势委托设置为自己(这会导致崩溃) 2)在上面添加自己的手势,并检查y值。这将防止滑动,但它也会吃掉点击和移动,所以滑块实际上不会按预期更改 3)实现具有自定义手势的自定义滑块。问题是我无法像默认值一样匹配pan手势更改滑块。由于您必须自己实现pan并调整位置,因此很难匹配真正的行为。
这些方法都对我无效。有人能够解决这个问题吗?我能想到的唯一解决方案是完全防止滚动,添加左/右按钮,并根据需要编程转换页面。
2个回答

5

您可以将UIPanGestureRecognizer添加到滑块上,并将cancelsTouchesInView属性设置为false,以避免在拖动滑块时触发UIPageViewController的滑动:

let panGesture = UIPanGestureRecognizer()
panGesture.cancelsTouchesInView = false
yourSlider.addGestureRecognizer(panGesture)

0

我认为最好的解决方案是重新设计UI,不要使用在UIPageViewController上水平滚动/刷卡的组件。用户已经习惯了在UIPageViewController上进行水平刷卡,如果更改这种行为可能会令人困惑/沮丧。


这似乎也是苹果的观点,因为当它是一个滚动页面视图控制器时,他们不提供访问。如果没有人能解决这个问题,我会把这标记为答案,但我希望有办法解决它。作为消费者,我觉得我应该能够使用滑块,在任何其他地方滑动以更改页面。 - David Cottrell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接