如何使用视图来自定义我的手势响应者链:“可滑动” UITabBarController-> UIViewController-> PageViewController

时间:2019-04-27 19:29:03

标签: ios swift uitabbarcontroller uigesturerecognizer uipageviewcontroller

我在尝试自定义手势响应程序链时遇到问题

我来自Cocoa / macOS和Mouse Events,手势的概念让我震惊

根据我的研究得出的假设:

我的“手势”没有发送到我想要的手势识别器时遇到了问题。 (我原本以为手势是传递给控制器​​的,但是后来我得知情况并非如此,而GestureRecognizers则归Views所有)

查看层次结构:

  • “可滑动”的UITabBarController(SwipeableTabBarController
    • UIViewController
    • UIViewController
    • UIViewController(UIView)
      • PageViewController(_PageContentView和_UIQueueingScrollView)
        • CollectionViewController(CollectionView)

这就是我要实现的目标:

  • 如果您在屏幕上的任意位置滑动,将在3个UIViewControllers之间移动(感谢SwipeableTabBarController
  • 如果您在最右边的第三UIViewController上向右滑动,您实际上将翻阅PageViewController的页面
  • 如果您在第三个UIViewController(包含PageViewController)上向左滑动,并且位于PageViewController的最左侧,则您将进入第二个(中)UIViewController

但是

  • 一旦导航到最右边的UIViewController,所有滑动手势都将由UIQueueingScrollView上的UIPageViewController使用。这意味着一旦进入最右边的视图,就无法向左滑动回到中间视图。滑动只是在页面之间翻转(如果在左侧页面,则什么也没有发生)

  • 我手动枚举了子视图以找到此UIQueueingScrollView,并从中删除了所有GestureRecognizers,这使手势可以传递到SwipeableTabBarController,所以您可以滑动回到中间视图...但这当然会中断UIPageViewController的滚动

我的目标:

以某种方式对UIPageViewController中的GestureRecognizers进行了突变(看来我必须在_UIQueueingScrollView上对其进行修改),以便

  • 如果您要查看的是最左侧的页面:

    • 向左滑动手势:
      • 将被传递给SwipeableTabBarController中的GestureRecognizers。主UIViewController将交换
    • 向右滑动手势:
      • 将被传递到GestureRecognizers中的UIQueueingScrollView,浏览量将跳至下一页
  • 否则,如果您正在浏览其他页面:

    • 所有滑动手势均传递给UIQueueingScrollView

我最大的困扰是,我不能只覆盖手势接收器,我必须创建新的自定义GestureRecognizers并将它们手动附加到我的视图中……但是我不知道如何让这些新的自定义GestureRecognizers通过表示视图层次结构

0 个答案:

没有答案