iOS - 关于performSelector:withObject:afterDelay:的小瑕疵修复

今天在自定义视频播放器中的进度条时,发现之前完成的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:withObject:afterDelay:的小瑕疵修复)