2 UIPageViewControllers手势冲突

时间:2016-07-27 12:46:33

标签: ios uigesturerecognizer uipageviewcontroller

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

覆盖容器视图的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 个答案:

答案 0 :(得分:1)

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

似乎UIKit对哪个页面控制器传递手势感到困惑,因为他们都会听同样的事情。

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