Swift UIScrollView UITableView UICollectionView 滚动结束、滑动结束检测判断

当用户用多个手指滑动scrollview时,缓慢停止,并没有触发这个代理方法:
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView)

UICollectionView有3种停止滚动类型,分别是:

  • 1、快速滚动,自然停止;
  • 2、快速滚动,手指按压突然停止;
  • 3、慢速上下滑动停止。

并没有一个回调能够正确识别所有的停止滑动。

UIScrollView有三个Bool类型属性:isTracking、isDragging、isDecelerating,在滚动和结束滚动时都有自己的值。

在3种动作触发的(DidEndDecelerating, DidEndDragging)两个方法中,isTracking、isDragging、isDecelerating 的Bool值分别为:
停止类型1:
DidEndDecelerating: isTracking:0, isDragging:0, isDecelerating:0

停止类型2:
DidEndDragging: isTracking:1, isDragging:0, isDecelerating:1
DidEndDecelerating: isTracking:0, isDragging:0, isDecelerating:0

停止类型3:
DidEndDragging: isTracking:1, isDragging:0, isDecelerating:0

具体实现如下:

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        //停止类型1、停止类型2
        let scrollToScrollStop = !scrollView.isTracking && !scrollView.isDragging && !scrollView.isDecelerating
        if scrollToScrollStop {
            self.scrollViewDidEndScroll()
        }
    }
    
    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        //停止类型3
        let dragToDragStop = scrollView.isTracking && !scrollView.isDragging && !scrollView.isDecelerating
        if dragToDragStop {
            self.scrollViewDidEndScroll()
        }
    }
    
    //停止滑动事件
    func scrollViewDidEndScroll() {
        
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容