由apple sample code "LazyTableImages"谈谈scrollView的两个代理方法

LazyTableImages是苹果官方推出来的一个经典sample code,里面的代码编写风格和设计思路值得学习

今天来说的是在lazyTableImages里出现的两个scrollView代理方法,他们的作用在于当tableView停止滑动时,进行调用加载网络图片:

(void)scrollViewDidEndDragging:(UIScrollView*)scrollViewwillDecelerate:(BOOL)decelerate {

  if(!decelerate) {  }

}

(void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView;

对于第二个方法,我们一般会接触得多一些,意思是当scrollView停止减速动画时,会触发该方法;

第一个方法,从方法名我们可以知道,是当我们停止拖动时触发,而后面declelerate参数是代表什么意思呢?我们看看苹果官方怎么说

意思是我们手指停止拖动,离开屏幕会被调用,当手指停止拖动时,如果scrollView依然会有滑动,那么decelerate参数为YES。

那么我们会不会有这么个疑问呢?

我们在LazyTableImages这里例子里用 - (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView;不就够了?干嘛还要在 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollViewwillDecelerate:(BOOL)decelerate 这个方法里判断decelerate是否为NO呢?

通过断点调试,我们会发现:

如果你快速滑动tableView,然后松开,tableView依然继续滑动,这个时候会先调用

(void)scrollViewDidEndDragging:(UIScrollView*)scrollViewwillDecelerate:(BOOL)decelerate ,此时的参数decelerate为YES。

当停止滑动时,会触发

- (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView(这种情况下,我们有scrollViewDidEndDecelerating方法处理就足够了)

但是,当你手指慢慢拖动,然后松开,此时tableView没有继续滑动,那么此时只会调用

(void)scrollViewDidEndDragging:(UIScrollView*)scrollViewwillDecelerate:(BOOL)decelerate

而且此时的参数decelerate为NO。并不会调用- (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView这个方法。

快速滑动和慢慢拖动,这两种动作在日常使用时,基本都是会用到的,所以需要在这两种方法里都进行处理!

你可能感兴趣的:(由apple sample code "LazyTableImages"谈谈scrollView的两个代理方法)