美文网首页iOS相关技术实现
scrollViewDidEndDecelerating和scr

scrollViewDidEndDecelerating和scr

作者: 春田花花幼儿园 | 来源:发表于2019-02-25 10:58 被阅读9次

    场景:

    最常见的一个功能场景就是视频自动播放。我们滑动停止地方的的视频播放视频,其他地方不播放视频。这里就设计到对列表滚动事件的一个监听。 常见的scrollViewDidScroll方法就不说了,下边的两个方法,这里详细的整理行下,做个备忘。

    方法一:

    -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    {
        NSLog(@"%d------%s", decelerate, __FUNCTION__);
    }
    

    顾名思义,当有拽的行为的时候,会触发:

    1. 触发时机:手指按住屏幕滑动scrollView,然后手指离开屏幕的时候,触发
    2. decelerate:
      (1)当你滑动scrollView,然后手指离开屏幕,只要scrollView还能自行滚动一段时间,那么则是1。
      (2)和上边相反则是0,强调下首先和滑动速度没有关系。 当手指按住scrollView,快速或者慢速的滑动,手指始终不离开屏幕,手指滑动多少,scrollView就滚动多少,完全跟手。 那么此时手指离开屏幕后scrollView是禁止的,不会再自行滚动,那么就是0。

    方法二:

    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    {
        NSLog(@"%s",__FUNCTION__);
    }
    

    顾名思义,当减速结速的时候,会触发:

    1. 触发时机:当手指离开屏幕后,scrollView仍然在自行滚动,停止后,会触发这个方法。

    特殊场景:

    有一个场景, 当你快速滑动scrollView, 然后手指离开屏幕, 此时decelerate = 1。 然后在scrollView还在滑动的过程中时手指按住scrollView让其停止,scrollView表现是立即停止滚动,此时手指离开屏幕, 会再次回调decelerate = 0,同时回调scrollViewDidEndDecelerating

    所以我们一般这么写:

    -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    {
        if (!decelerate) {
            NSLog(@"这个方法加decelerate判断,只是处理scrollView跟着手指滑动而滑动,手指离开屏幕就停止的情况");
        }
    }
    
    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    {
        NSLog(@"这个方法用来处理用户手指离开屏幕,scrollView仍然滚动,然后停止的情况");
    }
    

    对于视频自动播放,以上两个方法在调用视频播放方法的时候,视频播放方法内部都要进行容错处理:如果视频正在播放,那么就不要重新走播放流程了。

    交流


    希望能和大家交流技术
    Blog:http://www.lilongcnc.cc


    相关文章

      网友评论

        本文标题:scrollViewDidEndDecelerating和scr

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