如何在快速滑动或快速连续向左和向右滑动时跟踪 pageViewController 的索引

How to tracking index of pageViewController when swipe too fast or swipe to left and right continuously very fast

我的视图控制器中有一个页面视图控制器,它是无限循环滚动的 pageViewController。

通常,我可以使用 属性 indexController 为 pageViewController 中的每个视图控制器跟踪当前视图控制器(我的代码中的 ContentViewController)的索引。

class ContentViewController: UIViewController {

    var indexController = 0

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

我通过 2 个函数跟踪索引 2 属性 nextIndexcurrentIndex

func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
        if let vc = pendingViewControllers[0] as? ContentViewController {
            nextIndex = vc.indexController
        }
    }

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
        let prevIndex = currentIndex
        if completed {
            currentIndex = nextIndex
        }
        else {
            nextIndex = currentIndex
        }

    }

但是当我如此快速地向左滚动或非常快速地连续左右滑动时,上面的 2 个函数无法正确调用,并且 currentIndex 无法正确更新。

我能做什么?我可以防止滑动太快吗?请有人帮我解决这个问题!

尝试将 pageviewcontroller 的 uiscrollview 的委托设置为您的视图控制器。

for view in pageViewController!.view.subviews {
            if let scrollView = view as? UIScrollView {
                scrollView.delegate = self
            }
        }

然后在这个func中获取pageViewController的当前view controller

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {}

然后正确更新索引