class TutorialViewController: UIViewController { // MARK: - Properties var pageIndex: Int = 0 var presentAnimation: UIViewControllerAnimatedTransitioning? = TutorialAnimation() var dismissAnimation: UIViewControllerAnimatedTransitioning? = TutorialAnimation() // MARK: IBOutlets @IBOutlet weak var pageControl: UIPageControl! @IBOutlet weak var backgroundImage: UIView! // MARK: - Initialization override func awakeFromNib() { super.awakeFromNib() setup() } func setup() { // Override me to set pageIndex, prevAnimationCoordinator, and nextAnimationCoordiantor } // MARK: - View Lifecycle override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.pageControl.currentPage = pageIndex // Hack to fix rotation issues self.rotateTopView(view: view) } // MARK: - Navigation func showNext() { performSegue(withIdentifier: "next", sender: self) } func showPrevious() { performSegue(withIdentifier: "unwind", sender: self) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "next" { if let destinationVC = segue.destination as? TutorialViewController { destinationVC.delegate = delegate } } super.prepare(for: segue, sender: sender) } // MARK: - IBActions @IBAction func changePage(_ sender: UIPageControl) { let index = sender.currentPage if index <= self.pageIndex { showPrevious() } else { showNext() } } @IBAction func unwindToPreviousTutorial(_ sender: UIStoryboardSegue) { } }