创建一个无限循环的 UIPageViewController

Posted

技术标签:

【中文标题】创建一个无限循环的 UIPageViewController【英文标题】:Create an infinite looping 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 就是这样!非常感谢。我想将此标记为正确答案。 那我就直接写评论吧。 【参考方案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…

【讨论】:

以上是关于创建一个无限循环的 UIPageViewController的主要内容,如果未能解决你的问题,请参考以下文章

RestKit - 到同一实体的关系映射创建无限循环

React Context 在获取用户数据时创建了一个无限循环

使用后台并行无限循环 C# 读取缓冲区 [关闭]

双向链表无限循环? [关闭]

componentDidUpdate 创建无限循环,不知道如何避免它

取出页面视图控制器设置的无限循环