避免使用UIPageViewController"过度滚动"

时间:2015-12-24 13:00:38

标签: ios objective-c iphone cocoa-touch uipageviewcontroller

我的UIPageViewController上有2个VC。

我希望如果用户在第一个视图中,他将无法向右滑动(仅向左 - 到第二个视图),如果他在第二个视图中看来他不能向左滑动(就在右边 - 到第一个视图)。

我希望用户无法滚动 - 不是黑色视图(当我返回nil时会发生什么:- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController)

1 个答案:

答案 0 :(得分:1)

  1. "黑色视图"可能是您的主视图的背景,或UIPageViewController的背景颜色。
  2. 您可以根据PageViewController当前显示的ViewController取消其中一个方向的滚动
  3. 首先将VC设置为PageViewController的内部滚动视图的委托。您可以在此处添加更复杂的子视图遍历,这是一个简单的版本:

    for (UIView *view in self.pageViewController.view.subviews) {
        if ([view isKindOfClass:[UIScrollView class]]) {
             [(UIScrollView *)view setDelegate:self];
        }
    } 
    

    然后在VC中添加一个属性:

    @property (nonatomic) CGPoint lastOffset;
    

    之后实现以下滚动视图委托方法

    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
        scrollView.scrollEnabled = YES;
    }
    
    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
        scrollView.scrollEnabled = YES;
        self.lastOffset = scrollView.contentOffset;
    }
    
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        CGPoint nowOffset = scrollView.contentOffset;
        NSLog(@"delta %f", self.lastOffset.x - nowOffset.x);
        if ((self.lastOffset.x - nowOffset.x) < 0) {
            //uncomment to prevent scroll to left
            //scrollView.scrollEnabled = NO;
        } else if ((self.lastOffset.x - nowOffset.x) > 0) {
            //uncomment to prevent scroll to right
            //scrollView.scrollEnabled = NO;
        } else {
            scrollView.scrollEnabled = YES;
        }
    }