创建一个无限循环的 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的主要内容,如果未能解决你的问题,请参考以下文章
React Context 在获取用户数据时创建了一个无限循环