BouncyPageViewController
  • August 10, 2023

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

GitHub


View Github

YOU MIGHT ALSO LIKE...
ViewCondition

✨ Super sweet syntactic sugar for SwiftUI.View initializers. At a Glance

SwiftUIX

SwiftUIX attempts to fill the gaps of SwiftUI, providing an extensive suite of components, extensions and utilities to complement the ...

SwiftUI Environment Overrides

A tiny library that adds a control panel for testing how SwiftUI app adapts for different color themes, accessibility settings, ...