【问题标题】:IOS Issues Telling When Scroll View has FinishedIOS 问题告诉滚动视图何时完成
【发布时间】:2013-05-25 02:44:26
【问题描述】:

我在这里找到了一篇文章,简要描述了如何判断 UIScrollView 是否已完成滚动How to know exactly when a UIScrollView's scrolling has stopped?。它使用 scrollViewDidEndDragging 函数,并在 UIScrollView 文档和上面提到的帖子中指定,willDecelerate:(BOOL)decelerate 参数告诉滚动何时停止。但是,我似乎仍然无法让这段代码 sn-p 工作:

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

    if (!decelerate)
    {
        isScrolling = NO;
    }

    isScrolling = YES;
}

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

【问题讨论】:

    标签: iphone ios xcode uiscrollview uiscrollviewdelegate


    【解决方案1】:

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

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

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

    【讨论】:

    • 真棒有没有办法告诉滚动何时开始,所以我可以将 isScrolling 设置为 YES?这是用 scrollViewDidScroll 方法处理的吗? @Caleb
    • ...didEnd...方法的地方,一般也有...willBegin...方法。查看UIScrollViewDelegate 的文档。
    • 谢谢我最终使用了 -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2013-06-09
    • 2017-02-03
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多