一、開始滑動:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
NSLog(@"??滑動,滑動。。。");
#ifdef DEBUG
#else
// 《友盟 統(tǒng)計》統(tǒng)計UIScrollView的滑動
[MobClick event:@"haha_scrollView_slide" label:@"UIScrollView滑動"];
#endif
}
二、滑動停止:
怎么檢測UICollectionView停止?jié)L動成了問題(停止?jié)L動后展示完整信息)。
經(jīng)過調(diào)查,發(fā)現(xiàn)UICollectionView有3種停止?jié)L動類型,分別是:1、快速滾動,自然停止;2、快速滾動,手指按壓突然停止;3、慢速上下滑動停止。
第1種類型在UIScrollView 的Delegate可檢測:
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
但第2、第3種卻沒有暴露方法供使用,但會觸發(fā)Delegate:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
繼續(xù)分析,UIScrollView有三個Bool類型屬性:tracking、dragging、decelerating,在滾動和結束滾動時都有自己的值。
在3種動作觸發(fā)的兩個方法中,tracking、dragging、decelerating 的Bool值分別為:
停止類型1:DidEndDecelerat:0,dragging:0,decelerating:0
停止類型2:DidEndDragging:tracking:1,dragging:0,decelerating:1
DidEndDecelerat:tracking:0,dragging:0,decelerating:0
停止類型3:DidEndDragging:tracking:1,dragging:0,decelerating:0
上面三種動作結束后,只要捕捉到tracking、dragging、decelerating的1個組合即可監(jiān)測到UICollectionView的停止?jié)L動。
具體實現(xiàn)如下:
#pragma mark - UIScrollDelegate
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
// 停止類型1、停止類型2
BOOL scrollToScrollStop = !scrollView.tracking && !scrollView.dragging && !scrollView.decelerating;
if (scrollToScrollStop) {
NSLog(@"????????滾動結束");
}
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (!decelerate) {
// 停止類型3
BOOL dragToDragStop = scrollView.tracking && !scrollView.dragging && !scrollView.decelerating;
if (dragToDragStop) {
NSLog(@"????????滾動結束");
}
}
}