将UIPageViewController滑动与iOS 7 UINavigationController反滑动手势相结合

scr*_*rrr 7 objective-c ios ios7

我有一个导航控制器,推动包含UIPageViewController(PAGES)的视图控制器(PARENT).现在我使用平移/滑动手势在页面视图控制器的子节点之间切换.但是,我无法再使用屏幕左边框的滑动手势弹出PARENT -view控制器,因为它被解释为PAGES中的手势.

当显示最左侧的视图控制器时,是否可以完成滑动到弹出?

两个想法:

  1. 返回nil in pageViewController:viewControllerBeforeViewController- >不起作用.

  2. 如此处所述,限制触摸区域.

还是有更简单的方法?

anc*_*jic 16

我和@smallwisdom的情况相同,但处理方式不同.

我有一个视图控制器A,我推动我的导航控制器的堆栈.此视图控制器A包含一个水平滚动视图,从屏幕左侧一直延伸到右侧.

在这种情况下,当我想A从导航控制器的堆栈中刷屏幕弹出视图控制器时,我最终做的就是滚动这个水平滚动视图.

解决方案非常简单.

在我的视图控制器中A,我有这样的代码:

_contentScrollView = [[UIScrollView alloc] init];
[self.view addSubview:_contentScrollView];
for (UIGestureRecognizer *gestureRecognizer in _contentScrollView.gestureRecognizers) {
   [gestureRecognizer requireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer];
}
Run Code Online (Sandbox Code Playgroud)

它很棒.这是做什么的?它告诉scrollView的手势识别器,他们必须等待,看看其他手势识别器是否会识别当前手势.

如果其他人无法识别,那么他们将不再需要等待,他们可以尝试识别当前的手势.

如果该其他识别器成功并识别当前手势,则所有等待的手势识别器将自动失败.

等手势识别他们不得不等待被设置为导航控制器的interactivePopGestureRecognizer.他负责滑动到后退的姿势.


Lcs*_*sky 5

我大多同意@ ancajic的回答.当你将UIPageViewController的transitionStyle设置为'Scroll'时,我想提供一个额外的案例,你不会在其中设置gestureRecognizers,解决方法是:

if (self.navigationController?.interactivePopGestureRecognizer != nil)
{
    for view in self.pageViewController!.view.subviews
    {
        if let scrollView = view as? UIScrollView
        {
            scrollView.panGestureRecognizer.requireGestureRecognizerToFail(self.navigationController!.interactivePopGestureRecognizer!);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 一个小建议,使用可选绑定,而不是强制解包。 (2认同)