UIPageViewControllerDataSource 委托(delegate)有两个必需的方法:viewControllerBeforeViewController 和 viewControllerAfterViewController。
我遇到了一个问题。这是我正在使用的代码。
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 个(上一个、当前和下一个) View Controller 都被实例化了。因此,当您转换到 View Controller 2 时,将实例化 View Controller 1 和 3。
func pageViewController(pageViewController: UIPageViewController,
viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
这些函数不指示用户滑动的方向,而是指示下一个和上一个 View Controller
要实现滑动,您需要实现 UIPageViewControllerDelegate 及其 pageViewController:willTransitionToViewControllers: 或 pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted: 函数或添加UIPageViewController 的手势识别器的观察者
