BouncyPageViewController 0.1.1

BouncyPageViewController 0.1.1

Maintained by BohdanOrlov.


Version License Platform

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


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



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


To run the example project, clone the repo

$ pod install

and run as usual.



iOS 9+

Swift 3


To use latest release add this to Cartfile:

git ""

Then run in terminal:

$ carthage update


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'


Bohdan Orlov, [email protected]


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