Home

Awesome

BouncyPageViewController

Version License Platform

Page view controller with bounce effect inspired by motion design by Stan Yakushevish.

Quickstart

Create a queue of UIViewControllers to display

let pagesQueue: [UIViewController]() = ... // your view controllers here

Create a BouncyPageViewController passing initial view controllers

let pageViewController = BouncyPageViewController(initialViewControllers: Array(pagesQueue[0...1]))

Assign closures for providing next/pevious view controllers

pageViewController.viewControllerAfterViewController = self.viewControllerAfterViewController
pageViewController.viewControllerBeforeViewController = self.viewControllerBeforeViewController

Vend the next ViewController from the queue

func viewControllerAfterViewController(prevVC: UIViewController) -> UIViewController? {
    if let idx = self.pagesQueue.index(of: prevVC), idx + 1 < self.pagesQueue.count {
        return self.pagesQueue[idx + 1]
    }
    return nil
}

Assign a didScroll callback closure

pageViewController.didScroll = self.pageViewControllerDidScroll

Update the UI using the offset and progress

func pageViewControllerDidScroll(pageViewController: BouncyPageViewController, offset: CGFloat, progress: CGFloat) {
    for vc in pageViewController.visibleControllers() {
        let vc = (vc as! ViewController)
        vc.progress = progress

    }
}

Configuration

How much pages overlap eachother, more inset - higher bounce

    public var pageContentInset: CGFloat = 30

How long the bounce animates when you release the page

    public var pageBounceAnimationDuration: TimeInterval = 1

How far you can scroll the last page until it snaps back (half of the page by default)

    public var overscrollBounceMultiplier: CGFloat = 0.5

Example

To run the example project, clone the repo

$ pod install

and run as usual.

Installation

Requirements

iOS 9+

Swift 3

Carthage

To use latest release add this to Cartfile:

git "https://github.com/BohdanOrlov/BouncyPageViewController"

Then run in terminal:

$ carthage update

CocoaPods

BouncyPageViewController is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod "BouncyPageViewController"

Due to Swift 3, you have to add this to the end of Podfile:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.0'
        end
    end
end 

Author

Bohdan Orlov, bohdan.orlov@gmail.com

License

BouncyPageViewController is available under the MIT license. See the LICENSE file for more info.