【问题标题】:Create an infinite looping UIPageViewController创建一个无限循环的 UIPageViewController
【发布时间】:2020-08-19 22:03:53
【问题描述】:

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

我看了这篇文章: 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]
}

感谢任何帮助!

【问题讨论】:

  • 这是因为你 return nil 所在的行。只要你这样做,就意味着“不可能再往这个方向走”。但我相信您的要求是总是可以在任一方向上走得更远。 :)
  • @matt 就是这样!非常感谢。我想将此标记为正确答案。
  • 那我就直接写评论吧。

标签: ios swift uipageviewcontroller uipagecontrol


【解决方案1】:

这是因为你 return nil 所在的行。只要你这样做,就意味着“不可能再往这个方向走”。但我相信您的要求是总是可以在任何一个方向上走得更远。 ?

【讨论】:

    【解决方案2】:

    你的索引逻辑有问题。

    例如在您检查的之前逻辑中

    previousIndex >= 0
    

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

    previousIndex > -1 
    

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

    2,1,0,2…
    

    与您使用的前进方向类似

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

    当您想要返回第一个控制器时有效地停止序列

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

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

    0,1,2,0…
    

    【讨论】:

      猜你喜欢
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 2021-05-14
      • 2021-09-17
      相关资源
      最近更新 更多