【问题标题】:Prevent UIPageViewController's swipe from affecting a UISlider防止 UIPageViewController 的滑动影响 UISlider
【发布时间】:2015-11-27 06:53:27
【问题描述】:

我在其他领域看到过这个问题,但在我的情况下没有一个答案有效。我有一个 UIPageViewController,它有一个包含 UISlider 的子视图控制器。

当您尝试移动滑块时,它会激活页面视图控制器的滚动。您必须点击,在滑块圆圈上暂停,然后移动。

UIPageViewController 设置为滚动类型,因此未设置gestureRecognizers。 (标题声明“仅在过渡样式为 'UIPageViewControllerTransitionStylePageCurl' 时才填充”)。因此,我什至无法正确访问手势。

我尝试了几种方法来防止 UIPageViewController 影响滑块,但无济于事。我试过了: 1)遍历子子树并将UIScrollView的平移手势委托设置为我自己(这会导致崩溃) 2)在顶部添加我自己的手势,并检查 y 值。这将防止滑动,但它也会吃掉水龙头并移动,因此滑块实际上不会按预期改变 3) 使用自定义手势实现了自定义滑块。问题是我无法匹配更改滑块的平移手势与默认设置相同。由于必须自己实现平移和调整位置,因此很难匹配真实的行为。

这些方法都不适合我。有没有人能够解决这个问题?我能想到的唯一解决方案是防止一起滚动,添加左/右按钮,并相应地以编程方式转换页面。

【问题讨论】:

    标签: ios swipe uipageviewcontroller uislider pan


    【解决方案1】:

    您可以将UIPanGestureRecognizer 添加到滑块,并将cancelsTouchesInView 属性添加到false 以避免UIPageViewController 在拖动滑块时滑动:

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

    【讨论】:

      【解决方案2】:

      我认为最好的解决方案是重新设计 UI,使其不具有在 UIPageViewController 上水平滚动/滑动的组件。用户已经习惯于在 UIPageViewController 上的任意位置执行水平滑动,如果更改该行为可能会感到困惑/沮丧。

      【讨论】:

      • 这似乎也是 Apple 所相信的,因为当它是滚动页面视图控制器时,它们不提供访问权限。如果没有人可以解决问题,我会将其标记为答案,但我想有办法做到这一点。作为消费者,我觉得我应该能够使用滑块,并在其他任何地方滑动以更改页面。
      猜你喜欢
      • 1970-01-01
      • 2015-05-25
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多