The two methods viewControllerBeforeViewController and viewControllerAfterViewController UIPageViewControllerDataSource do not indicate the direction of movement.
The delegate transitionCompleted method of the UIPageViewController doesn't help us either. It just says if the page has been completely cleaned.
So, which method should I use to pinpoint the direction of the user (left or right)?
Perhaps these two properties may help:
let directionForward = UIPageViewControllerNavigationDirection.Forward let directionReverse = UIPageViewControllerNavigationDirection.Reverse
My code is as follows:
import UIKit class ProView: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate { var pageViewController: UIPageViewController? let characterImages = ["character1", "character2", "character1", "character2", "character1", "character2", "character1", "character2"] override func viewDidLoad() { super.viewDidLoad() createPageViewController() setupPageControl() character = 1 } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } // Forward, check if this IS NOT the last controller func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController ProView: UIViewController) -> UIViewController? { let itemController = ProView as PageItemController // Check if there is another view if itemController.itemIndex+1 < characterImages.count { return getItemController(itemController.itemIndex+1) } return nil } // Check if this IS NOT the first controller func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController ProView: UIViewController) -> UIViewController? { let itemController = ProView as PageItemController if itemController.itemIndex < 0 { return getItemController(itemController.itemIndex-1) } return nil } private func getItemController(itemIndex: Int) -> PageItemController? { if itemIndex < characterImages.count { let pageItemController = self.storyboard!.instantiateViewControllerWithIdentifier("ItemController") as PageItemController pageItemController.itemIndex = itemIndex pageItemController.imageName = characterImages[itemIndex] return pageItemController } return nil } func createPageViewController() { let pageController = self.storyboard!.instantiateViewControllerWithIdentifier("PageController") as UIPageViewController pageController.dataSource = self pageController.delegate = self if characterImages.count > 0 { let firstController = getItemController(0)! let startingViewControllers: NSArray = [firstController] pageController.setViewControllers(startingViewControllers, direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil) } pageViewController = pageController addChildViewController(pageViewController!) self.view.addSubview(pageViewController!.view) pageViewController?.didMoveToParentViewController(self) } func setupPageControl() { let appearance = UIPageControl.appearance() appearance.pageIndicatorTintColor = UIColor.grayColor() appearance.currentPageIndicatorTintColor = UIColor.whiteColor() } func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { return characterImages.count } func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { } // BETA func pageViewController(PageItemController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers pageViewController: [AnyObject], transitionCompleted completed: Bool) { if (!completed) { // You do nothing because whatever page you thought // the book was on before the gesture started is still the correct page return; } // This is where you would know the page number changed and handle it appropriately character = workaround } } class PageItemController: UIViewController { @IBOutlet weak var imageCharacterChoose: UIImageView! var itemIndex: Int = 0 var imageName: String = "" { didSet { if let imageView = imageCharacterChoose {imageCharacterChoose.image = UIImage(named: imageName) } } } }
According to what pbasdf said,
var currentIndex: Int = 0 var nextIndex: Int = 0 func pageViewController(PageItemController: UIPageViewController, willTransitionToViewControllers pageViewController: [AnyObject]) {
source share