Last active
September 14, 2019 15:13
-
-
Save trilliwon/0b24c1e056c26ac51b7f0cb4babc4ad2 to your computer and use it in GitHub Desktop.
pagevc delegate, datasource
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension HomeViewController: UIPageViewControllerDataSource { | |
func pageViewController(_ pageViewController: UIPageViewController, | |
viewControllerBefore viewController: UIViewController) -> UIViewController? { | |
guard let index = mainViewControllers.firstIndex(of: viewController) else { return nil } | |
let prevIndex = index - 1 | |
guard prevIndex >= 0, prevIndex < mainViewControllers.count else { return nil } | |
return mainViewControllers[prevIndex] | |
} | |
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { | |
guard let index = mainViewControllers.firstIndex(of: viewController) else { return nil } | |
let nextIndex = index + 1 | |
guard nextIndex >= 0, nextIndex < mainViewControllers.count else { return nil } | |
return mainViewControllers[nextIndex] | |
} | |
func presentationCount(for pageViewController: UIPageViewController) -> Int { | |
return mainViewControllers.count | |
} | |
} | |
extension HomeViewController: UIPageViewControllerDelegate { | |
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { | |
if completed { | |
if let currentViewController = pageViewController.viewControllers?[0] { | |
guard let index = mainViewControllers.firstIndex(of: currentViewController) else { return } | |
pageControl.set(progress: index, animated: true) | |
} | |
} | |
} | |
} | |
func swipeRight() { | |
guard let currentViewController = self.viewControllers?.first else { | |
return | |
} | |
guard let nextViewController = dataSource?.pageViewController(self, viewControllerBefore: currentViewController) else { | |
return | |
} | |
setViewControllers([nextViewController], direction: .reverse, animated: true) { completed in | |
self.delegate?.pageViewController?(self, | |
didFinishAnimating: true, | |
previousViewControllers: [], | |
transitionCompleted: completed) | |
} | |
} | |
func swipeLeft() { | |
guard let currentViewController = self.viewControllers?.first else { | |
return | |
} | |
guard let nextViewController = dataSource?.pageViewController(self, viewControllerAfter: currentViewController) else { | |
return | |
} | |
setViewControllers([nextViewController], direction: .forward, animated: true) { completed in | |
self.delegate?.pageViewController?(self, | |
didFinishAnimating: true, | |
previousViewControllers: [], | |
transitionCompleted: completed) | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment