2012-11-05 112 views
4

我有一个UIPageViewController可以处理翻开我的“书”的页面。但是,每个书页都是ViewControllerUIScrollViewsubview。由于contentSizeUIScrollView只能够垂直滚动。问题在于,当用户垂直滚动scrollview时,由于scrollview仍在滚动/减速,用户无法翻页。看到这个的一个非常简单的方法是滚动页面,然后尝试点击视图的边缘。这通常会改变页面,并且当scrollview没有移动时它确实改变页面。但是,当它移动时,水龙头会导致滚动视图停止移动,而不是翻页。UIScrollView在滚动时取消UIPageViewController手势

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

有关我想要实现的行为的示例,请查看iPhone上Twitter的官方客户端。 可以从时间线滑动到Discover,而馈送仍然从滚动中减速。

+0

你能分享一个包含这种情况的演示应用程序吗? – souvickcse

回答

-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]; 
} 

我希望它能帮助

+0

嗯。有类似的问题。但Apple的Photoscroller示例不需要将元素缩放到页面宽度以翻页。 – deepwinter

0

UIGestureRecognizer类有可能通过使用requireGestureRecognizerToFail:方法来设置其他手势识别器的依赖。

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

一个UIScrollView滚动事件将阻止其他UIView动画,所以在Twitter上的情况下,他们很可能刷之前取消滚动的一瞬间:
你的情况,这种方法可以在这种方式来使用风景。正如你问你的问题:

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

我会提出一个解决方法。

不是依靠UIPageViewController的固有UIPanGestureRecognizer的,包括在页面视图自己UIPanGestureRecognizer所以当在页面的适当部分检测到平移和适当的方向进行,即新UIPanGestureRecognizer覆盖UIPageViewController那's UIGestureRecognizer s并触发必要的操作。具体而言,您需要:

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

这样既滚动动画将暂停,而页面翻转在一个流体平移手势内完成。

相关问题