TestsTested | ✗ |
LangLanguage | SwiftSwift |
License | MIT |
ReleasedLast Release | Dec 2017 |
SwiftSwift Version | 4.0 |
SPMSupports SPM | ✗ |
Maintained by [Alexandr].
SwiftyPageController will be helpful to use in many pages controller.
Advantages:
class ViewController: UIViewController {
@IBOutlet weak var segmentControl: UISegmentedControl!
var containerController: SwiftyPageController!
override func viewDidLoad() {
super.viewDidLoad()
segmentControl.addTarget(self, action: #selector(segmentControlDidChange(_:)), for: .valueChanged)
}
func segmentControlDidChange(_ sender: UISegmentedControl) {
// select needed controller
containerController.selectController(atIndex: sender.selectedSegmentIndex, animated: true)
}
func setupContainerController(_ controller: SwiftyPageController) {
// assign variable
containerController = controller
// set delegate
containerController.delegate = self
// set animation type
containerController.animator = .parallax
// set view controllers
let firstController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "\(FirstViewController.self)")
let secondController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "\(SecondViewController.self)")
let thirdController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "\(ThirdViewController.self)")
containerController.viewControllers = [firstController, secondController, thirdController]
// select needed controller
containerController.selectController(atIndex: 0, animated: false)
}
// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let containerController = segue.destination as? SwiftyPageController {
setupContainerController(containerController)
}
}
}
func swiftyPageController(_ controller: SwiftyPageController, alongSideTransitionToController toController: UIViewController) {
}
func swiftyPageController(_ controller: SwiftyPageController, didMoveToController toController: UIViewController) {
segmentControl.selectedSegmentIndex = containerController.viewControllers.index(of: toController)!
}
func swiftyPageController(_ controller: SwiftyPageController, willMoveToController toController: UIViewController) {
}
func selectController(atIndex index: Int, animated: Bool)
To choose animation use property
public var animator: AnimatorType
You can use three types of animation:
If you want to create own animation you need to implement SwiftyPageControllerAnimatorProtocol.
public protocol SwiftyPageControllerAnimatorProtocol {
var animationDuration: TimeInterval { get }
var animationProgress: Float { get set }
var animationSpeed: Float { get set }
func setupAnimation(fromController: UIViewController, toController: UIViewController, panGesture: UIPanGestureRecognizer, animationDirection: SwiftyPageController.AnimationDirection)
func didFinishAnimation(fromController: UIViewController, toController: UIViewController)
}
And use it like that:
containerController.animator = .custom(CustomAnimationController())
To run the example project, clone the repo, and run pod install
from the Example directory first.
SwiftyPageController is available through CocoaPods. To install
it, simply add the following line to your Podfile:
pod "SwiftyPageController"
alkhokhlov, [email protected]
SwiftyPageController is available under the MIT license. See the LICENSE file for more info.