我在这里发现了一篇文章,简要描述了如何判断UIScrollView是否已完成滚动How to know exactly when a UIScrollView's scrolling has stopped?。它使用scrollViewDidEndDragging函数并按照上面提到的UIScrollView文档和post中的说明,使用willDecelerate:(BOOL)减速参数来判断滚动何时停止。但是,我仍然无法使此代码段工作:
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
NSLog(@"%d", decelerate);
if (!decelerate)
{
isScrolling = NO;
}
isScrolling = YES;
}
我确认该功能正在使用NSLog执行,但即使在我松开滚动完成后,减速仍然等于1.为什么会这样?
答案 0 :(得分:1)
-scrollViewDidEndDragging:willDecelerate:
,但不一定在视图停止滚动时调用。如果您想知道视图何时停止移动,请使用-scrollViewDidEndDecelerating:
或-scrollViewDidEndScrollingAnimation:
。
如果您只想知道滚动视图当前是否正在滚动,那么最好询问滚动视图本身,而不是试图跟踪它何时开始以及何时停止。如果滚动视图正在滚动,则可能是因为用户正在主动拖动,或者因为拖动后滚动视图正在减速。您可以轻松地将一个方法(在一个类别中)添加到UIScrollView
,以检查这两个条件:
@interface UIScrollView (Scrolling)
- (BOOL)scrolling;
@end
@implementation UIScrollView (Scrolling)
- (BOOL)scrolling
{
return (self.dragging || self.decelerating);
}
@end