TL;DR UIPageViewController done properly.
Pageboy is a simple, highly informative page view controller.
- Simplified data source management.
- Enhanced delegation; featuring exact relative positional data and reliable updates.
- Infinite scrolling support.
- Automatic timer-based page transitioning.
- Support for custom page transitions.
Pageboy is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'Pageboy'
And run pod install
.
Pageboy is available through Carthage. Simply install carthage with Homebrew using the following command:
$ brew update
$ brew install carthage
Add Pageboy to your Cartfile
:
github "uias/Pageboy"
Pageboy requires iOS 8.0 or above.
- Create an instance of a
PageboyViewController
and provide it with aPageboyViewControllerDataSource
.
class PageViewController: PageboyViewController, PageboyViewControllerDataSource {
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
}
}
- Implement the
PageboyViewControllerDataSource
functions.
func viewControllers(forPageboyViewController pageboyViewController: PageboyViewController) -> [UIViewController]? {
// return array of view controllers
return [viewController1, viewController2]
}
func defaultPageIndex(forPageboyViewController pageboyViewController: PageboyViewController) -> PageboyViewController.PageIndex? {
// use default index
return nil
}
- Enjoy.
UIPageViewController
doesn't provide the most useful delegate methods for detecting where you are when paging; this is where Pageboy comes in. PageboyViewControllerDelegate
provides a number of functions for being able to detect where the page view controller is, and where it's headed.
Called when the page view controller is about to embark on a transition to a new page.
func pageboyViewController(_ pageboyViewController: PageboyViewController,
willScrollToPageAtIndex index: Int,
direction: PageboyViewController.NavigationDirection,
animated: Bool)
Called when the page view controller was scrolled to a relative position along the way transitioning to a new page. Also provided is the direction of the transition.
func pageboyViewController(_ pageboyViewController: PageboyViewController,
didScrollToPosition position: CGPoint,
direction: PageboyViewController.NavigationDirection)
Called when the page view controller did successfully complete a scroll transition to a page.
func pageboyViewController(_ pageboyViewController: PageboyViewController,
didScrollToPageAtIndex index: Int,
direction: PageboyViewController.NavigationDirection,
animated: Bool)
Called when the page view controller reloads its child view controllers.
func pageboyViewController(_ pageboyViewController: PageboyViewController,
didReload viewControllers: [UIViewController],
currentIndex: PageboyViewController.PageIndex)
-
reloadPages
- Reload the view controllers in the page view controller. (Refreshes the data source).public func reloadPages()
-
scrollToPage
- Scroll the page view controller to a new page programatically.public func scrollToPage(_ pageIndex: PageIndex, animated: Bool, completion: PageTransitionCompletion? = nil)
Pageboy also provides custom animated transition support. This can be customised via the .transition
property on PageboyViewController
.
pageboyViewController.transition = Transition(style: .push, duration: 1.0)
The following styles are available:
.push
.fade
.moveIn
.reveal
PageboyAutoScroller
is available to set up timer based automatic scrolling of the PageboyViewController
:
pageboyViewController.autoScroller.enable()
Support for custom intermission duration and other scroll behaviors is also available.
viewControllers
:[UIViewController]?
- The view controllers that are displayed in the page view controller.currentViewController
:UIViewController?
- The view controller that the page view controller is currently at.
currentIndex
:Int?
- The page index that the page view controller is currently at.currentPosition
:CGPoint?
- The relative page position that the page view controller is currently at.
isScrollEnabled
:Bool
- Whether scroll is enabled on the page view controller.isDragging
:Bool
- Whether the page view controller is currently being dragged.isScrollingAnimated
:Bool
- Whether the page view controller is currently animating a scroll between pages.isUserInteractionEnabled
:Bool
- Whether user interaction is enabled on the page view controller.navigationOrientation
:UIPageViewControllerNavigationOrientation
- The orientation that the page view controller transitions on.isInfiniteScrollEnabled
:Bool
- Whether the page view controller should infinitely scroll between page limits (i.e. able to continuously scroll to first page from last).
- Created by Merrick Sapsford (@MerrickSapsford)
Bug reports and pull requests are welcome on GitHub at https://github.com/uias/Pageboy.
The library is available as open source under the terms of the MIT License.