IOS问题告诉何时滚动视图已完成



我在这里找到了一篇文章,简要介绍了如何判断一个UIScrollView是否已经完成滚动如何确切地知道一个UIScrollView's滚动已经停止?它使用scrollviewdidenddrag函数,并且正如上面提到的UIScrollView文档和帖子中指定的那样,使用willdederate:(BOOL)减速参数来告诉滚动何时停止。然而,我似乎仍然不能让这个代码片段工作:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    NSLog(@"%d", decelerate);
    if (!decelerate)
    {
        isScrolling = NO;
    }
    isScrolling = YES;
}

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

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

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

@interface UIScrollView (Scrolling)
- (BOOL)scrolling;
@end
@implementation UIScrollView (Scrolling)
- (BOOL)scrolling
{
    return (self.dragging || self.decelerating);
}
@end

最新更新