滑动过快或连续左右滑动非常快时如何跟踪pageViewController的索引

Posted

技术标签:

【中文标题】滑动过快或连续左右滑动非常快时如何跟踪pageViewController的索引【英文标题】:How to tracking index of pageViewController when swipe too fast or swipe to left and right continuously very fast 【发布时间】:2019-06-29 13:43:53 【问题描述】:

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

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

class ContentViewController: UIViewController 

    var indexController = 0

    override func viewDidLoad() 
        super.viewDidLoad()
    


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

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 也不能正确更新。

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

【问题讨论】:

尝试为您的控制器启用分页。 【参考方案1】:

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

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

然后在这个func中获取pageViewController的当前视图控制器

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) 

然后正确更新您的索引

【讨论】:

以上是关于滑动过快或连续左右滑动非常快时如何跟踪pageViewController的索引的主要内容,如果未能解决你的问题,请参考以下文章

原始战争之主界面滑动效果

html5页面左右滑动是怎么实现的?

CSS 轮播图的实现(纯CSS,连续滑动无倒滑效果)

canvas 橡皮擦 解决滑动过快出现圆点问题

你如何做出和识别手势?

SwipeRefreshLayout与ViewPager滑动事件冲突解决