首页 文章

UIPageViewController与Peeking

提问于
浏览
7

我正在尝试使用Interface Builder中的 UIPageViewController 创建一个页面浏览器,它允许显示相邻页面的一部分(也就是偷看) . 我一直在关注http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/的教程(并将其移植到Swift中),这很简单,但是我无法弄清楚在UIPageViewController中显示的页面是否比屏幕更小(并且居中)并使相邻页面部分显示在屏幕左右两侧 .

我试图在IB中调整页面内容视图控制器的大小并使用代码,但页面视图控制器仍将填满整个屏幕 .

有没有人知道涵盖此功能的教程或什么是获得所需效果的好方法?

以下来自Bamboo Paper的截图显示了我正在努力实现的目标......

enter image description here

2 回答

  • 3

    就像@davew所说,偷看意见需要使用 UIScrollView . 我也搜索了一种使用 UIPageViewController 但无法找到任何资源的方法 .

    使用 UIScrollView 来实现此功能并不像我想象的那么痛苦 .


    这是一个简单的例子,可以看到基本控件的运行情况 .

    Preview

    首先:制作一个 UIViewController ,然后在 viewDidLoad 方法中添加以下代码:

    float pad = 20;
    NSArray* items = @[@"One", @"Two", @"Three", @"Four"];
    
    self.view.backgroundColor = [UIColor greenColor];
    
    UIScrollView* pageScrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
    pageScrollView.opaque = NO;
    pageScrollView.showsHorizontalScrollIndicator = NO;
    pageScrollView.clipsToBounds = NO;
    pageScrollView.pagingEnabled = YES;
    
    adjustFrame(pageScrollView, pad, deviceH()/4, -pad*3, -deviceH()/2);
    
    [self.view addSubview: pageScrollView];
    
    float w = pageScrollView.frame.size.width;
    
    for(int i = 0; i < [items count]; i++){
        UIView* view = [[UIView alloc] initWithFrame:pageScrollView.bounds];
        view.backgroundColor = [UIColor blueColor];
        setFrameX(view, (i*w)+pad);
        setFrameW(view, w-(pad*1));
        [pageScrollView addSubview:view];
    }
    
    pageScrollView.contentSize = CGSizeMake(w*[items count], pageScrollView.frame.size.height);
    

    仅供参考,我使用这些util函数来调整视图框的大小;我厌倦了用3行代码手动更改它们 .

    更新

    我已经将这个代码包装在一个简单的ViewController中并将其放在GitHub上

    https://github.com/kjantzer/peek-page-view-controller

    它绝不是完整的,但它是一个有效的开始 .

  • 5

    我只是在寻找相同功能的好解决方案 . 我在Ray Wenderlich的网站上找到了一个很好的教程,名为"How To Use UIScrollView to Scroll and Zoom Content" . 它说明了使用 UIScrollView 可以执行的多项操作 . 第四个也是最后一个是"Viewing Previous/Next Pages",这是你的"peek"功能 .

    我还没有实现这个,但关键步骤似乎是:

    • 创建一个比屏幕窄的 UIScrollView

    • 开启 Paging Enabled

    • 关闭 Clip Subviews

    • UIScrollView 与您的页面并排填充

    • UIScrollView 嵌入填充屏幕宽度的 UIView 内,以便您可以捕捉并传递滚动视图外的触摸

相关问题