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

来源:互联网 发布:免费弄lol网吧特权mac 编辑:程序博客网 时间:2024/05/18 01:44

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 方法。

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



0 0
原创粉丝点击