由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这个方法。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容