如何解决创建一个无限循环的UIPageViewController
我正在尝试创建一个页面视图控制器,一旦您到达最后一个屏幕(向右滑动),它就会在第一个屏幕上重新开始;如果向后滚动,一旦它碰到第一个屏幕(向左滑动),它就会滚动到最后。
我看了这篇文章: scroll in circles
,但是在滚动时它仍停留在第一个和最后一个屏幕上。这是我的dataSource的设置方式:
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,2…
类似地沿您使用的前进方向
guard viewControllerList.count != nextIndex else {return nil}
要返回第一个控制器时有效地停止序列
guard viewControllerList.count != nextIndex else {return viewControllerList.first}
确保您的逻辑可以在3页的情况下为您提供索引。
0,2,0…
,
这是因为您return nil
所在的行。只要您这样做,就意味着“不可能朝这个方向前进”。但我相信您的要求是,总是可能 向 方向发展。 ?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。