UIScrollView 停止滚动监测

今天需要做一个控件的动画,在scrollView滚动的时候隐藏底部一个控件,在scrollView停止滚动的时候显示底部那个控件。

该需求的“滚动隐藏”容易满足,只需要我们实现scrollView的代理:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

但“停止滚动显示”这个需求,在我尝试了所有的scrollView代理后,仍然无法满足需求。苦思之下,想到了scrollView的监听滚动代理:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

如果我们在该代理里添加一个延时定时器,在每次scrollView回调上面代理的时候,首先取消上次添加的定时任务,然后在添加一个新的定时任务,这样只要在上面的这个代理不在调用的时候,最后一个定时器,所携带的方法,就会被调用。然后就有了如下实践:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {]
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(scrollViewDidEndScrollingAnimation) object:nil];
    [self performSelector:@selector(scrollViewDidEndScrollingAnimation) withObject:nil afterDelay:0.1];
}

这样我们只要在:

- (void)scrollViewDidEndScrollingAnimation {
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(scrollViewDidEndScrollingAnimation:) object:nil];
    // do something after end scrolling
}

实现停止滚动的代码就可以了。