4

我有一个UIPageViewController可以处理我的“书”页的翻页。但是,每个书页都是 aViewController和 a UIScrollViewas a subview。由于. UIScrollView_ contentSize问题是当用户scrollview垂直滚动时,由于scrollview仍在滚动/减速,用户无法翻页。一个非常简单的查看方法是滚动页面,然后尝试点击视图的边缘。这通常会更改页面,并且在scrollview不移动时确实会更改页面。但是,当它移动时,点击会导致滚动视图停止移动而不是翻页。

scrollviews如果UIPageViewController尝试使用手势通过点击或平移页面来翻页以导致翻页动画,我该如何取消手势?

有关我想要实现的行为的示例,请查看 iPhone 上的 Twitter 官方客户端。当提要仍在滚动减速时,可以从时间线滑动到发现。

4

3 回答 3

1

滚动事件将UIScrollView阻止其他UIView动画,因此在 Twitter 的情况下,它们可能会在滑动视图之前一瞬间取消滚动。正如您在问题中所问的那样:

“如果 UIPageViewController 试图使用手势通过点击或平移页面来翻页以导致翻页动画,我该如何取消滚动视图手势?”

我会建议一个解决方法。

不要依赖UIPageViewController's 固有UIPanGestureRecognizer的 ,在页面视图中包含您自己UIPanGestureRecognizer的 ,这样当在页面的适当部分检测到平移并以适当的方向执行时, newUIPanGestureRecognizer会覆盖UIPageViewController' UIGestureRecognizers 并触发必要的操作。具体来说,您需要:

(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;

这样滚动动画就会停止,并且在一个流畅的平移手势内完成翻页。

于 2014-11-11T02:29:53.903 回答
0

UIGestureRecognizer类可以使用requireGestureRecognizerToFail:方法设置对其他手势识别器的依赖关系。
在您的情况下,可以通过以下方式使用此方法:

for (UIGestureRecognizer *gestureRecognizer in pageController.gestureRecognizers) {
    for (ViewController *viewController in viewControllers) {
        for (UIGestureRecognizer *gestureRecognizerForFail in viewController.scrollView.gestureRecognizers) {
            [gestureRecognizerForFail requireGestureRecognizerToFail:gestureRecognizer];
        }
    }
}
于 2014-04-24T18:01:43.007 回答
-1

我遇到了同样的问题,我解决了我的问题......在我的情况下,我有启用缩放功能的 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];
}

我希望它有帮助

于 2014-03-08T21:07:30.117 回答