2 UIPageViewController 手势冲突
Posted
技术标签:
【中文标题】2 UIPageViewController 手势冲突【英文标题】:2 UIPageViewControllers gestures conflict 【发布时间】:2016-07-27 12:46:33 【问题描述】:我有 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】:我建议看看requireGestureRecognizerToFail
:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/#//apple_ref/occ/instm/UIGestureRecognizer/requireGestureRecognizerToFail:
UIKit 似乎对将手势传递给哪个页面控制器感到困惑,因为它们都将监听同一件事。
我想您希望外部页面视图控制器的手势识别器(可作为数组属性访问:self.pageViewController.gestureRecognizers
)要求内部页面视图控制器的手势识别器失败。这样,照片之间的滑动将优先,但如果没有其他照片可滑动,您应该可以在个人资料之间滑动。
【讨论】:
无法访问该手势,因此,不调用委托方法:C 在任何地方都说gestureRecognizer数组为空(有什么想法吗? 抱歉,刚刚在文档中发现了这一点:“仅在过渡样式为UIPageViewControllerTransitionStylePageCurl
时才填充”
您可以查看覆盖hitTest:
并确保内部页面视图控制器内部的触摸在需要进一步滚动时被转发给它,但其他所有内容都被转发给外部页面视图控制器?
坚持这一点,有很多层,它们都在接受我的触摸:\你能帮忙我需要覆盖哪个 UIView 吗?我的结构是:外部寻呼机包含 UserProfileVC(一个来自视频),其中我得到了带有嵌入式内部寻呼机的容器视图,其中包含另一个 photoVC(上面只有 uiimageview)。现在,我只是想找到负责照片滑动的视图以上是关于2 UIPageViewController 手势冲突的主要内容,如果未能解决你的问题,请参考以下文章
如何快速阻止 UIPageViewController 的滑动手势?
手势不适用于包含 UITableViewControllers 的 UIPageViewController
UIPageViewController 手势覆盖我的 UITableView
将删除滑动手势从 UIPageViewController 传递给 UITableView