pageViewController的视差效果

时间:2015-04-27 04:29:00

标签: ios objective-c uiscrollview autolayout uipageviewcontroller

我有一个pageViewController - 我想在其后面添加一个带有图片视图的滚动视图,当我在pageViewController中滚动页面时 - 背景应该向同一方向滚动但是低见。我在故事板中使用auto-layout

所以我添加了pageViewController:

pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
                                                 navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                               options:nil];
pageController.delegate = self;
pageController.dataSource = self;
[self addChildViewController:pageController];

CGRect pageFrame = self.view.frame;
pageFrame.origin.y += 50.f;
pageFrame.size.height -= 50.f;
pageController.view.frame = pageFrame;
pageController.view.backgroundColor = [UIColor clearColor];
[self.view addSubview:pageController.view];

获取它的scrollview:

for (UIView *possibleScrollView in pageController.view.subviews) {
    if ([possibleScrollView isKindOfClass:[UIScrollView class]]) {
        ((UIScrollView *)possibleScrollView).delegate = self;
    }
}

并聆听其代表:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"%f", scrollView.contentOffset.x);
    [parlaxScrollView setContentOffset:CGPointMake(scrollView.contentOffset.x * .2f, scrollView.contentOffset.y) animated:NO];
}

当我滚动到第二页时,我有一些令人困惑的结果:

378.500000
386.500000
403.500000
419.000000
448.000000
469.000000
...
747.000000
750.000000
375.000000 ///!!!!!THE CONTENT OFFSET RETURNED TO THE INITIAL VALUE!!!!!

为什么我的内容视图偏移重置?它有什么问题吗?

2 个答案:

答案 0 :(得分:0)

我认为你需要跟踪当前正在显示的页面,并将宽度添加到内容偏移量。

这样的事情: let currentPage:Int

答案 1 :(得分:0)

5年后,抱歉耽搁sorry 也许其他人仍然会遇到同样的问题。

您不应更改页面视图控制器的滚动视图的委托。它可以破坏其正常行为。

相反,您可以:

  1. 向页面视图控制器的视图添加平移手势:

    pd.concat([df, df_to_append], ignore_index=True)
  2. 添加新功能以了解视图如何滚动。

    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(panRecognized(gesture:)))
    view.addGestureRecognizer(panGesture)
    panGesture.delegate = self
    
  3. 将您的ViewController声明为@objc func panRecognized(gesture: UIPanGestureRecognizer) { // Do whatever you need with the gesture.translation(in: view) }

  4. 实现此功能:

    UIGestureRecognizerDelegate