2016-07-27 54 views
1

我有2个UIPageViewControllers一个在其他人,都与水平滚动。一个全屏,包含所有用户信息,另一个 - 该用户的照片库。行为:当我滑动所有用户照片时,会滑动全屏。但有时候,我无法滑动照片,看起来像这个手势被阻止,并且它只刷动第一个寻呼机。但是,当我重新滑动手势时,它会解锁。这里是一个视频,我正在谈论的内容:https://youtu.be/Hr7tDKNv15A帮我找到导致它的错误,现在我无法想象我需要如何调试。2 UIPageViewControllers手势冲突

容器视图的Overrided则hitTest,存储内部寻呼机:

override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? { 
     if pointInside(point, withEvent: event) { 
      print("Inside") 
      print("Self view:\(self)") 
      print("Self subviewsview:\(self.subviews)") 
      print("Self subviewsview of subview:\(self.subviews[0].subviews)") 

      return self.subviews[0].subviews[0] 

     } else { 
      print("Outside") 
      return nil 
     } 

    } 

这是我的输出,当我抚摸照片:

Inside 
Self view:<armeniaApp.debugGesture: 0x7f7f8be46e60; frame = (0 0; 400 400); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7f7f8be1e7c0>> 
Self subviewsview:[<_UIPageViewControllerContentView: 0x7f7f8be920a0; frame = (0 0; 400 400); clipsToBounds = YES; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7f7f89ff1e00>>] 
Self subviewsview of subview:[<_UIQueuingScrollView: 0x7f7f8a836e00; frame = (0 0; 400 400); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x7f7f8be81db0>; layer = <CALayer: 0x7f7f8be522b0>; contentOffset: {400, 0}; contentSize: {1200, 400}>] 

所以我需要在UIQueuingScrollView商店,但什么手势我需要做下一步? return self.subviews[0].subviews[0]不利于

回答

1

我建议考虑看看requireGestureRecognizerToFailhttps://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/#//apple_ref/occ/instm/UIGestureRecognizer/requireGestureRecognizerToFail

好像UIKit的是越来越糊涂哪个页面控制器传授给他们都将被监听手势一样的东西。

我想象你想要外部页面视图控制器的手势识别器(可作为数组属性:self.pageViewController.gestureRecognizers)来要求内部页面视图控制器的手势识别器失败。这样照片之间的滑动优先,但如果没有其他照片可以滑动到,则应该可以在配置文件之间滑动。

+0

无法访问该手势,因此不调用委托方法:C在任何地方,它表示gestureRecognizer数组为空(任何想法? –

+0

对不起,只是在文档中发现了这一点:“只有在过渡样式是'UIPageViewControllerTransitionStylePageCurl'“ –

+0

你可以看看覆盖'hitTest:'并确保在内部页面视图控制器中的触摸进一步滚动时转发给它,但其他所有内容都被转发到外部页面视图控制器? –