InsightfulPager 0.1.0

InsightfulPager 0.1.0

测试已测试
Lang语言 Obj-CObjective C
许可协议 MIT
发布最新发布2016年1月

Maintained by William Boles.



  • By
  • William Boles

InsightfulPager是UIPageViewController的替代品,它提供了类似的功能但提供了更多的反馈。

用法

初始化

#import <InsightfulPager/ISPPagingViewController.h>

....

- (ISPPagingViewController *)pagingViewController
{
    if (!_pagingViewController)
    {
        _pagingViewController = [[ISPPagingViewController alloc] initWithPageViewController:self.pages[0]
                                                                                   pageSize:self.view.frame.size
                                                                                 centerPage:NO];

        self.pagingViewController.dataSource = self;
        self.pagingViewController.delegate = self;
    }

    return _pagingViewController;
}

将其添加为子视图控制器

#import <InsightfulPager/ISPPagingViewController.h>

....

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self addChildViewController:self.pagingViewController];
    [self.view addSubview:self.pagingViewController.view];
    [self.pagingViewController didMoveToParentViewController:self];

    [self.pagingViewController beginAppearanceTransition:YES
                                                animated:YES];

}

可能的dataSource实现

#import <InsightfulPager/ISPPagingViewController.h>

....

- (UIViewController *)viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger indexOfFocusedViewController = [self.pages indexOfObject:viewController];

    ISEPageViewController *viewControllerBeforeViewController = nil;

    if (indexOfFocusedViewController > 0)
    {
        viewControllerBeforeViewController = self.pages[(--indexOfFocusedViewController)];
    }

    return viewControllerBeforeViewController;
}

- (UIViewController *)viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger indexOfFocusedViewController = [self.pages indexOfObject:viewController];

    ISEPageViewController *viewControllerAfterViewController = nil;

    if (indexOfFocusedViewController < ([self.pages count] - 1))
    {
        viewControllerAfterViewController = self.pages[(++indexOfFocusedViewController)];
    }

    return viewControllerAfterViewController;
}

可能的delegate实现

#import <InsightfulPager/ISPPagingViewController.h>

....

- (void)didMoveToViewController:(UIViewController *)toViewController
             fromViewController:(UIViewController *)fromViewController
{
    ISEPageViewController *page = (ISEPageViewController *)toViewController;

    NSUInteger indexOfViewControllerMovedTo = [self.pages indexOfObject:toViewController];
    NSUInteger indexOfViewControllerMovedFrom = [self.pages indexOfObject:fromViewController];

    NSString *direction = nil;

    if (indexOfViewControllerMovedTo > indexOfViewControllerMovedFrom)
    {
        direction = @"forwards";
    }
    else
    {
        direction = @"backwards";
    }

    page.informationalLabel.text = [NSString stringWithFormat:@"Moved onto this viewcontroller by scrolling %@", direction];
}

小于全屏

InsightfulPager允许您指定不同的页面大小,以便可以将页面外的视图同时显示在屏幕上。

#import <InsightfulPager/ISPPagingViewController.h>

....

- (ISPPagingViewController *)pagingViewController
{
    if (!_pagingViewController)
    {
        CGSize pageSize = CGSizeMake(self.view.frame.size.width,                                                                                        
                                     self.view.frame.size.height - kISESelectionBarOffset) //kISESelectionBarOffset is a constant float defined else where

        _pagingViewController = [[ISPPagingViewController alloc] initWithPageViewController:self.pages[0]
                                                                                   pageSize:pageSize
                                                                                 centerPage:NO];

        self.pagingViewController.dataSource = self;
        self.pagingViewController.delegate = self;
    }

    return _pagingViewController;
}

需要当前显示的页面

如果您需要当前显示的(焦点集中)的UIViewController页面,可以使用focusedViewController属性。

InsightfulPager附带一个示例项目,其中提供了比上述更详细的说明。

InsightfulPager使用模块来导入/使用框架 - 您需要在项目中启用此功能。

发现了问题?

如果有针对InsightfulPager的特定问题、功能请求或想分享意见,请在此处创建新问题。请注意,有关UIPageViewController的一般问题应在Stack Overflow上提问。

鼓励提交pull请求!请尽量与现有的代码风格保持一致。如果您考虑对项目进行重大更改或添加,请提前通过创建一个新的问题来沟通。这样可以让大家对即将到来的更改做好准备,确保更改与项目的设计理念保持一致,并避免重复工作。