Skip to content

Instantly share code, notes, and snippets.

@trilliwon
Last active September 14, 2019 15:13
Show Gist options
  • Save trilliwon/0b24c1e056c26ac51b7f0cb4babc4ad2 to your computer and use it in GitHub Desktop.
Save trilliwon/0b24c1e056c26ac51b7f0cb4babc4ad2 to your computer and use it in GitHub Desktop.
pagevc delegate, datasource
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