美文网首页
Swift UIScrollView UITableView U

Swift UIScrollView UITableView U

作者: 刘乔泓 | 来源:发表于2023-02-09 15:21 被阅读0次

当用户用多个手指滑动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() {
        
    }

相关文章

网友评论

      本文标题:Swift UIScrollView UITableView U

      本文链接:https://www.haomeiwen.com/subject/qzfhkdtx.html