UIScrollView的滚动时取消UIPageViewController手势(UIScrollV

2019-07-03 14:51发布

我有一个UIPageViewController ,处理把我的“书”的页面。 然而,每本书页是一个ViewController具有UIScrollViewsubview 。 该UIScrollView只能够垂直由于滚动contentSize 。 问题是,当用户滚动scrollview垂直,作为scrollview仍在滚动/减速用户无法翻开新的一页。 一个非常简单的方法,看看这是滚动页面,然后尝试挖掘视图的边缘。 这通常更改页面,它确实改变时,页面scrollview是不动的。 然而,当它移动时,水龙头会导致滚动视图停止移动,而不是翻开新的一页。

如何取消scrollviews手势如果UIPageViewController试图用手势通过敲击或平移网页,使翻页动画翻开新的一页?

因为我要实现的行为的一个例子,检查Twitter的iPhone上的官方客户端。 这是可能的,从时间轴左右滑动来查看,而饲料仍然从滚动减速。

Answer 1:

一个UIScrollView滚动事件将阻止其他UIView动画,所以在Twitter上的情况下,他们很可能刷卡视图之前取消滚动一瞬间。 至于你问你的问题:

“我怎么取消scrollviews手势如果UIPageViewController试图用手势通过敲击或平移网页翻开新的一页,使翻页动画?”

我会提出一个解决办法。

相反,依靠的UIPageViewController的固有UIPanGestureRecognizer ,包括你自己UIPanGestureRecognizer在页面视图,以便当页面的适当部分检测到平移和适当的方向进行的是,新的UIPanGestureRecognizer覆盖UIPageViewControllerUIGestureRecognizer小号并触发必要的行动。 具体而言,您需要:

(1)使用暂停滚动动画

CGPoint offset = scrollView.contentOffset;
[scrollView setContentOffset:offset animated:NO];

(2)打开网页编程方式使用

- (void)setViewControllers:(NSArray *)viewControllers direction:
  (UIPageViewControllerNavigationDirection)direction animated:
  (BOOL)animated completion:(void (^)(BOOL finished))completion;

所以,无论是滚动动画将暂停,而翻页是一个流体平移手势内完成。



Answer 2:

UIGestureRecognizer类有可能通过使用设置在其它手势识别器依赖性requireGestureRecognizerToFail:方法。
你的情况,这种方法可以在这种方式来使用:

for (UIGestureRecognizer *gestureRecognizer in pageController.gestureRecognizers) {
    for (ViewController *viewController in viewControllers) {
        for (UIGestureRecognizer *gestureRecognizerForFail in viewController.scrollView.gestureRecognizers) {
            [gestureRecognizerForFail requireGestureRecognizerToFail:gestureRecognizer];
        }
    }
}


Answer 3:

我有同样的问题,我周围的工作我的方式......在我的情况我有变焦启用PDF。 所以,我有,例如:

[scrollView setMaximumZoomScale:6];
[scrollView setMinimumZoomScale:1];

当我初始化控制器及其滚动视图,只是以后我每次改变方向或页面我改变缩放以适应页面的宽度,只有当变焦是“远”

CGFloat desiredWidth = scrollView.frame.size.width/pdfRect.size.width;
if (desiredWidth>[self zoomScale]) {
    [scrollView setZoomScale:desiredWidth animated:YES];
}

我希望它能帮助



文章来源: UIScrollView cancels UIPageViewController gestures when scrolling