當用戶用多個手指滑動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() {
}