-1

我在这里找到了一篇文章,简要描述了如何判断 UIScrollView 是否已完成滚动如何准确知道 UIScrollView 的滚动何时停止?. 它使用 scrollViewDidEndDragging 函数,并在 UIScrollView 文档和上面提到的帖子中指定,willDecelerate:(BOOL)decelerate 参数告诉滚动何时停止。但是,我似乎仍然无法让这个代码片段工作:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    NSLog(@"%d", decelerate);

    if (!decelerate)
    {
        isScrolling = NO;
    }

    isScrolling = YES;
}

我确认该函数正在使用 NSLog 执行,但即使在我放手并且滚动完成后减速仍然等于 1。这是为什么?

4

1 回答 1

1

-scrollViewDidEndDragging:willDecelerate:在您停止拖动后调用,但不一定在视图停止滚动时调用。如果您想知道视图何时停止移动,请使用-scrollViewDidEndDecelerating:-scrollViewDidEndScrollingAnimation:

如果您只想知道滚动视图当前是否正在滚动,最好询问滚动视图本身,而不是尝试跟踪它何时开始和何时停止。如果滚动视图正在滚动,则要么是因为用户正在主动拖动,要么是因为滚动视图在拖动后正在减速。您可以轻松地添加一个方法(在一个类别中)来UIScrollView检查这两个条件:

@interface UIScrollView (Scrolling)
- (BOOL)scrolling;
@end

@implementation UIScrollView (Scrolling)
- (BOOL)scrolling
{
    return (self.dragging || self.decelerating);
}
@end
于 2013-05-29T17:56:49.420 回答