创建一个无限循环的 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
所在的台词。只要那样做,就意味着“在这个方向上不可能再进一步了”。但我相信您的要求是 总是 有可能在 任一 方向上走得更远。
我正在尝试创建一个页面视图控制器,一旦您到达最后一个屏幕(向右滑动)它就会从第一个屏幕开始,如果您向后滚动,一旦它到达第一个屏幕(向左滑动)它将滚动到最后一个。
我看了这个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
所在的台词。只要那样做,就意味着“在这个方向上不可能再进一步了”。但我相信您的要求是 总是 有可能在 任一 方向上走得更远。