UISplitViewController滑动手势干扰其他滑动手势

时间:2014-08-06 15:08:08

标签: ios objective-c

我正在使用UISplitViewController,其中一个详细视图控制器包含一个添加了UIPanGestureRecognizer的视图。当我在细节视图控制器中滑动该视图时,识别手势,但是分割视图控制器的滑动手势识别器会干扰它;显示主视图控制器,忽略详细控制器中的手势识别器。

shouldRecognizeSimultaneouslyWithGestureRecognizer实现和调试UIGestureRecognizerDelegate方法显示了两个UIPanGestureRecognizer对象:一个来自详细视图控制器,一个来自拆分视图控制器,所以我确定他们相互干扰。

当我在拆分视图控制器上设置presentsWithGesture = NO时,详细视图控制器内的手势识别器可以正常工作。但是这会禁用分割视图控制器上的手势识别器,因此它并不能解决问题。

我还尝试在分割视图控制器上禁用手势识别器,只有当我需要其他手势识别器才能工作时,但是一旦分割视图控制器具有设置presentsWithGesture,它似乎无法设置变得可见。

我还尝试在分割视图控制器上禁用默认手势并添加我可以控制的自定义手势,但它不起作用。我尝试在手势上使用分割视图控制器按钮上的targetaction,但它不起作用。在拆分视图控制器上调用toggleMasterVisible:也不是一个选项,因为它是私有API的一部分。

有没有人对如何处理这个有任何建议?

1 个答案:

答案 0 :(得分:1)

我建议您在需要另一个手势时禁用UISplitViewController平移手势。这应该这样做:

for (UIGestureRecognizer* recognizer in [splitViewController gestureRecognizers]) {
    if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
        [recognizer setEnabled:NO];
    }
}

您可能不想每次都搜索它,因此我会在视图加载时存储对该手势识别器的引用,然后根据需要禁用并启用:

在viewDidLoad上:

for (UIGestureRecognizer* recognizer in [splitViewController gestureRecognizers]) {
    if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
        [self setSplitViewPanGesture:recognizer];
    }
}

后:

[self.splitViewPanGesture setEnabled:NO];

以后:

[self.splitViewPanGesture setEnabled:YES];