UIScrollView什么时候停止滚动?
2019-08-27 本文已影响0人
ImmortalSummer
-(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) {
//拖动停止时无减速动画(手指离开屏幕后滚动立刻停止)
// 停止滚动的处理代码
}
}