BouncyPageViewController
Page view controller with bounce effect inspired by motion design by Stan Yakushevish.
Quickstart
UIViewControllers
to display
Create a queue of let pagesQueue: [UIViewController]() = ... // your view controllers here
BouncyPageViewController
passing initial view controllers
Create a 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
}
didScroll
callback closure
Assign a pageViewController.didScroll = self.pageViewControllerDidScroll
offset
and progress
Update the UI using the 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, [email protected]
License
BouncyPageViewController is available under the MIT license. See the LICENSE file for more info.