ios - 2 UIPageViewControllers手势冲突

标签 ios uigesturerecognizer uipageviewcontroller

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

覆盖容器 View 的 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] 没有帮助

最佳答案

我建议看一下 requireGestureRecognizerToFail:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/#//apple_ref/occ/instm/UIGestureRecognizer/requireGestureRecognizerToFail :

UIKit 似乎对将手势传递给哪个页面 Controller 感到困惑,因为它们都将监听相同的内容。

我想您希望外部页面 View Controller 的手势识别器(可作为数组属性访问:self.pageViewController.gestureRecognizers)要求内部页面 View Controller 的手势识别器失败。这样一来,照片之间的滑动将优先,但如果没有其他照片可以滑动到,您应该能够在个人资料之间滑动。

关于ios - 2 UIPageViewControllers手势冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38613410/

相关文章:

ios - 如何在iPhone真机上打开数据库sqlite文件?

swift - 无法调用选择器和手势委托(delegate) iOS 13.2

ios - Table tap 和 didselect 方法冲突

ios - 使用 swipegester 自定义页面浏览指示器和 uipageviewcontroller

swift - 将数据从 TableView 传递到 PageViewController 包含的 View

ios - 如何删除 UIPageViewController 中的页面?

iphone - 我的 Objective C 代码中只需要一个版本吗?

ios - 向项目添加自定义字体但是当我尝试使用它们时我得到一个 "fatal error: unexpectedly found nil while unwrapping an Optional value"

ios - 在新的 ViewController 中声明时出现 Serval 问题/错误

ios - UIGestureRecognizer 首次使用后停止工作