如何在快速滑动或快速连续向左和向右滑动时跟踪 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 属性 nextIndex
和 currentIndex
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) {}
然后正确更新索引
我的视图控制器中有一个页面视图控制器,它是无限循环滚动的 pageViewController。
通常,我可以使用 属性 indexController
为 pageViewController 中的每个视图控制器跟踪当前视图控制器(我的代码中的 ContentViewController)的索引。
class ContentViewController: UIViewController {
var indexController = 0
override func viewDidLoad() {
super.viewDidLoad()
}
}
我通过 2 个函数跟踪索引 2 属性 nextIndex
和 currentIndex
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) {}
然后正确更新索引