TestsTested | ✗ |
LangLanguage | Obj-CObjective C |
License | MIT |
ReleasedLast Release | Jan 2016 |
Maintained by William Boles.
InsightfulPager is an alternative to UIPageViewController that fulfils a similar but provides more feedback.
#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];
}
#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;
}
#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 allows you to specify different page size so that views outside of the page can be displayed on the screena at the same time.
#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;
}
If you need the currently shown (in-focus) UIViewController
page you can use the focusedViewController
property.
InsightfulPager comes with an example project to provide more details than listed above.
InsightfulPager uses modules for importing/using frameworks - you will need to enable this in your project.
Please open a new Issue here if you run into a problem specific to InsightfulPager, have a feature request, or want to share a comment. Note that general UIPageViewController
questions should be asked on Stack Overflow.
Pull requests are encouraged and greatly appreciated! Please try to maintain consistency with the existing code style. If you're considering taking on significant changes or additions to the project, please communicate in advance by opening a new Issue. This allows everyone to get onboard with upcoming changes, ensures that changes align with the project's design philosophy, and avoids duplicated work.