Swift UIScrollView UITableView UICollectionView 滾動結束、滑動結束檢測判斷

當用戶用多個手指滑動scrollview時,緩慢停止,并沒有觸發(fā)這個代理方法:
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView)

UICollectionView有3種停止?jié)L動類型,分別是:

  • 1、快速滾動,自然停止;
  • 2、快速滾動,手指按壓突然停止;
  • 3、慢速上下滑動停止。

并沒有一個回調能夠正確識別所有的停止滑動。

UIScrollView有三個Bool類型屬性:isTracking、isDragging、isDecelerating,在滾動和結束滾動時都有自己的值。

在3種動作觸發(fā)的(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() {
        
    }
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容