创建一个无限循环的 UIPageViewController

Create an infinite looping UIPageViewController

我正在尝试创建一个页面视图控制器,一旦您到达最后一个屏幕(向右滑动)它就会从第一个屏幕开始,如果您向后滚动,一旦它到达第一个屏幕(向左滑动)它将滚动到最后一个。

我看了这个post: scroll in circles

但滚动时仍然停在第一个和最后一个屏幕。这是我的数据源的设置方式:

var viewControllerList: [UIViewController]!

      func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        guard let vcIndex = viewControllerList.firstIndex(of: viewController) else {return nil}
        
        let previousIndex = vcIndex - 1
        
        guard previousIndex >= 0 else {return viewControllerList.last}
        
        guard viewControllerList.count > previousIndex else { return nil}
        
        return viewControllerList[previousIndex]
}

  func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        guard let vcIndex = viewControllerList.firstIndex(of: viewController) else {return nil}
        
        let nextIndex = vcIndex + 1
        
        guard viewControllerList.count != nextIndex else {return nil}
        
        guard viewControllerList.count > nextIndex else
        {
            return viewControllerList.first}
    
        
        return viewControllerList[nextIndex]
}

感谢任何帮助!!

你的索引逻辑有问题。

例如在之前逻辑你检查

previousIndex >= 0

这意味着您永远不会在相反的方向上到达索引 0。你需要在那支票

previousIndex > -1 

以确保您可以在索引顺序为 3 页数组的情况下继续

2,1,0,2…

同样在前进方向你用

guard viewControllerList.count != nextIndex else {return nil}

当你想要return第一个控制器时有效地停止序列

guard viewControllerList.count != nextIndex else {return viewControllerList.first}

确保您的逻辑可以为您提供 3 页案例中的索引。

0,1,2,0…

这是因为你 return nil 所在的台词。只要那样做,就意味着“在这个方向上不可能再进一步了”。但我相信您的要求是 总是 有可能在 任一 方向上走得更远。