我有一个带有以编程方式内置的PageControl的UIPageViewController . 我有一个数组跟踪可以分页的视图控制器,我试图让PageControl显示与当前视图控制器页面相关的点 .
我有以下代码用于向后和向前翻页:
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let vcIndex = viewControllerList.index(of: viewController) else {
return nil
}
let previousIndex = vcIndex - 1
guard previousIndex >= 0 else {return nil}
guard viewControllerList.count > previousIndex else {return nil}
self.pageControl.currentPage = previousIndex
return viewControllerList[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let vcIndex = viewControllerList.index(of: viewController) else {return nil}
let nextIndex = vcIndex + 1
guard viewControllerList.count != nextIndex else {return nil}
guard viewControllerList.count > nextIndex else {return nil}
self.pageControl.currentPage = nextIndex
return viewControllerList[nextIndex]
}
当我将PageControl的当前页面设置为nextIndex或previousIndex时,我相信它应该显示正在显示的当前视图控制器的页面的正确点,但是它经常错过中间索引(总共有三个点) . 它通常只在第1点和第3点之间来回传递,并且不准确 .
如果有更好的方法,我会接受其他答案 .
1 回答
这是因为你将pageControl的当前索引设置在错误的位置 . 您必须将其设置为:
func pageViewController(UIPageViewController, willTransitionTo: [UIViewController]) Called before a gesture-driven transition begins.
或func pageViewController(UIPageViewController, didFinishAnimating: Bool, previousViewControllers: [UIViewController], transitionCompleted: Bool) Called after a gesture-driven transition completes.
这两种方法都来自UIPageViewControllerDelegate