iOS - 关于performSelector:withObje

作者: 未知代码 | 来源:发表于2016-06-29 00:00 被阅读1152次

    今天在自定义视频播放器中的进度条时,发现之前完成的demo中存在一个小bug,下面我简单描述一下。
    当在短时间内连续多次拖动进度条时,原本拖动结束5s后应该隐藏的bottomView,有的时候就会很快隐藏,代码如下:

    - (void)progressSliderTouchEnded:(UISlider *)sender {
        ...
        [self performSelector:@selector(hiddenAllView) withObject:nil afterDelay:5];
        ...
    }
    
    

    在简单的思考后,我发现了这个方法performSelector:withObject:afterDelay:中的延时(delay)是没有被清零的。对,就是这个小瑕疵。解决办法如下:

    - (void)progressSliderTouchEnded:(UISlider *)sender {
        // 先取消上次的delay
        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hiddenAllView) object:nil];
        ...
        [self performSelector:@selector(hiddenAllView) withObject:nil afterDelay:5];  
        ...
    }
    

    也就是在每次执行方法之前,先把之前的延迟取消掉,这样,如果在上一次延迟还没走完的情况下,再一次执行这个方法的时候,就不会像之前那样继续上次的延迟时间了。
    如果小伙伴们有更好的解决办法,欢迎交流~

    相关文章

      网友评论

      本文标题:iOS - 关于performSelector:withObje

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