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.
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 9.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)
-
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)
isInfiniteScrollEnabled
:Bool
- Whether the page view controller should infinitely scroll between page limits (i.e. able to continuously scroll to first page from last).navigationOrientation
:UIPageViewControllerNavigationOrientation
- The orientation that the page view controller transitions on.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.autoScroller
:PageboyAutoScroller
- Object that can be used for adding time-based auto scrolling behaviour.
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.
-
PageIndex
- The index of a page in the page view controller.next
- The next page if available. (n+1)previous
- The previous page if available. (n-1)first
- The first page in the view controller array.last
- The last page in the view controller array.atIndex(index: Int)
- A custom specified index.
-
NavigationDirection
- The direction that the page view controller travelled.neutral
- No movementforward
- Moved in a positive direction (Towards n+1).reverse
- Moved in a negative direction (Towards n-1).
Please feel free to contact me on Twitter.
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.