我在尝试自定义手势响应程序链时遇到问题
我来自Cocoa / macOS和Mouse Events,手势的概念让我震惊
根据我的研究得出的假设:
有点击,按下和手势事件,而不是将鼠标事件传递给NSResponders
。点击并传递到UIResponders
,手势传递到GestureRecognizers
(由UIView
拥有)
touchBegan / touchMoved / touchEnded和手势识别器之间的区别取决于手指的速度吗? (uigesturerecognizers-vs-touchesbegan-touchesmoved-touchesended-accuracy)。因此,如果您点击并缓慢移动,则基础UIView会收到touchMoved
事件。如果快速点击并拖动,将创建一个手势并将其传递到基础UIView
的GestureRecognizer。 I am pretty uncertain on this one, so I am opening another SO question to address this issue
当我说“向左滑动”时,是指您的手指向相反的方向移动,而我的意思是与导航动画方向相同。与“向右滑动”相同。
我的“手势”没有发送到我想要的手势识别器时遇到了问题。 (我原本以为手势是传递给控制器的,但是后来我得知情况并非如此,而GestureRecognizers则归Views所有)
查看层次结构:
这就是我要实现的目标:
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通过表示视图层次结构