使用 Swift 的 UIPageViewControllerDataSource 问题

Issue with UIPageViewControllerDataSource using Swift

UIPageViewControllerDataSource 委托有两个必需的方法:viewControllerBeforeViewControllerviewControllerAfterViewController

我遇到了一个问题。这是我正在使用的代码。

func pageViewController(pageViewController: UIPageViewController,
    viewControllerBeforeViewController ProView: UIViewController) -> UIViewController? {
    // ...
    print("You swiped BACK")
    return: nil
}

func pageViewController(pageViewController: UIPageViewController,
    viewControllerAfterViewController ProView: UIViewController) -> UIViewController? {  
        ...
        println("You swiped FORWARD")

        return nil
}

重现问题的步骤如下:

You swiped BACK
You swiped FORWARD

当我向左滑动时也会出现这种情况。为什么控制台同时打印它们而不是只打印一个?

发生这种情况是因为这两个函数都在转换时被调用,因为所有 3 个(上一个、当前和下一个)视图控制器都被实例化了。因此,当您转换到视图控制器 2 时,将实例化视图控制器 1 和 3。

func pageViewController(pageViewController: UIPageViewController,
viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?

func pageViewController(_ pageViewController: UIPageViewController,
 viewControllerAfterViewController viewController: UIViewController) -> UIViewController?

这些函数不指示用户滑动的方向,而是指示下一个和上一个视图控制器

要实现滑动,您需要实现 UIPageViewControllerDelegate 及其 pageViewController:willTransitionToViewControllers:pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted: 函数,或者向 UIPageViewController 的手势识别器添加观察者