美文网首页
UIScrollView什么时候停止滚动?

UIScrollView什么时候停止滚动?

作者: ImmortalSummer | 来源:发表于2019-08-27 18:31 被阅读0次
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    //减速动画停止时执行
    NSLog(@"scrollViewDidEndDecelerating");
}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    //停止拖动时执行(手指离开屏幕时就执行) 
   //可以根据decelerate 字段判断手指离开屏幕时是否有滚动动画
    if (decelerate) {  //拖动停止时有减速动画(如果有减速动画,手指离开屏幕时会执行这里, 减速动画执行完成后还会调用 scrollViewDidEndDecelerating)
        NSLog(@"scrollViewDidEndDragging - YES");
    }else{      //拖动停止时无减速动画
        NSLog(@"scrollViewDidEndDragging - NO");
    }
}

/*
手指滑动屏幕, 抬起手指时没有减速动画:
在手指离开时打印:
scrollViewDidEndDragging - NO

手指滑动屏幕, 抬起手指时有减速动画:
在手指离开时打印:
scrollViewDidEndDragging - YES
当减速动画执行完的时候打印:
scrollViewDidEndDecelerating
*/

以上代码打印顺序

// 1 手离开屏幕后, scrollView立刻停止滚动
scrollViewDidEndDragging - NO

//2 手离开屏幕后, scrollView还在继续滚动
scrollViewDidEndDragging - YES
scrollViewDidEndDecelerating

停止滚动事件的两种情况

情况1 scrollView设置分页效果

如果scrollView 设置了分页效果self.scrollView.pagingEnabled = YES;
那当你的手指离开屏幕时, 必然会有继续滚动的动画(即使差1个像素scrollView也会滚动.) 所以这时候 我们只要在-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView; 方法中执行停止滚动的处理代码即可.

情况2 scrollView没有设置分页效果

如果是普通的scrollView, 没有设置分页效果, 那要从两个角度考虑停止滚动. 代码如下:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    //(手指离开屏幕后滚动没有立刻停止) 减速动画执行完成, scrollView停止滚动
    // 停止滚动的处理代码
}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    if (!decelerate) {      
        //拖动停止时无减速动画(手指离开屏幕后滚动立刻停止)
        // 停止滚动的处理代码
    }
}

相关文章

网友评论

      本文标题:UIScrollView什么时候停止滚动?

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