使用 UIPageViewController 使 UI 滚动视图滚动

Posted

技术标签:

【中文标题】使用 UIPageViewController 使 UI 滚动视图滚动【英文标题】:Make a UI scroll view scroll with a UIPageViewController 【发布时间】:2014-02-05 22:14:53 【问题描述】:

我正在创建一个应用程序,我试图让 pagescrollviewcontroller 在屏幕上滑动,并让顶部的“导航”栏标题与标题一起实时滚动 我将标题栏视图作为自定义视图,并且我能够访问自定义滚动视图和页面视图控制器的滚动委托方法。然而。我看不到如何访问实时滚动位置?我知道这是可能的,因为 twitter 做到了(真的不可能不应该出现在任何人的词汇中),但我不确定如何实现这一点。

一张图片

主页标题与页面控制器在相同的滚动位置滑动。

当前代码:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
    if(scrollView.tag == 100) 
      CGPoint point = CGPointMake(mainScrollView.contentOffset.x * 1,0);
      [titleSwipe setContentOffset:point animated:YES];
    
    else 
        mainScrollView.contentOffset = CGPointMake(0,1);
        [mainScrollView setContentOffset:titleSwipe.contentOffset animated:YES];
    


- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:     (BOOL)decelerate 

    CGPoint point = CGPointMake(mainScrollView.contentOffset.x * 2,0);

    [titleSwipe setContentOffset:point animated:YES];


【问题讨论】:

您如何访问 UIPageViewController 的滚动视图委托?像这样的东西:***.com/a/19066412/705602 ? @mattson no in interface UIScrollView *v........ @mattson 然后在 viewdid 中加载 v = self.view.subviews[0]; apageveiw 控制器的第一个子视图是一个滚动视图,因此只需为它合成一个变量。如果有帮助,请提出我的问题! 这是一种非常冒险的方法,因为如果 Apple 决定更改 UIPageViewController 视图层次结构,您的应用程序就会崩溃。您至少应该遍历层次结构来找到它。 是的,我同意.. 我仍然停止使用 pageviewcontroller,因为您无法控制子控制器,所以我实现了自己的。但是然后只需循环浏览页面视图控制器的子视图,如果它是一种滚动视图,则中断循环,这将是滚动视图。 【参考方案1】:

你会在scrollViewDidScroll找到实时位置:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

    // X scroll
    //
    CGFloat percentage = scrollView.contentOffset.x / scrollView.contentSize.width;
    NSLog(@"Scrolled percentage: %f", percentage);

希望有帮助!

【讨论】:

多么愚蠢的委托方法名称。谢谢你1000次。哈哈 谢谢.. @pacman,再问一个问题并不意味着打扰你,但你知道为什么 pageviewcontroller 有一个奇怪的内容偏移量吗?它滚动得很好,但是如果我向前移动,内容偏移量会向前跳跃 300,反之亦然,你有没有遇到过这种情况? 嗯.. 不确定您的意思,但 pageViewController 会在视图不再可见时删除视图以优化内存。这可以解释为什么它会突然跳转。我必须实现与您相同的行为,但出于设计实现的原因,我重新实现了自己的 pageViewController。您可以通过创建 UIScrollView 并根据您拥有的控制器数量调整其内容大小来做到这一点。然后通过委托这个主滚动视图,您可以访问全局 x 偏移量。 是的,我认为,当它向前移动时,它不仅会添加下一个控制器,还会添加 AFTER 控制器,并且我得到了额外的 320 像素。为什么当我回去的时候它会跳-320。我想我将不得不做一些数学和修补=( boo hoo

以上是关于使用 UIPageViewController 使 UI 滚动视图滚动的主要内容,如果未能解决你的问题,请参考以下文章

带有渐变叠加的 UIPageViewController?

UIWebView 和 UIPageViewController

如何使 UIPageViewController 过渡行为类似于 IOS7 中的交互式弹出过渡样式

如何使用现有 UIPageViewController 的按钮以编程方式滑动视图

UIPageViewController 取消页面滑动

在 UINavigationController 中嵌套 UIPageViewController 只显示一页