美文网首页ios 八点钟学院
由apple sample code "LazyTab

由apple sample code "LazyTab

作者: 腾讯课堂八点钟学院 | 来源:发表于2016-11-16 15:20 被阅读73次

    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 "LazyTab

        本文链接:https://www.haomeiwen.com/subject/ukrrpttx.html