其他首页投稿(暂停使用,暂停投稿)iOS 开发

iOS - 关于performSelector:withObje

2016-06-29  本文已影响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];  
    ...
}

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

上一篇 下一篇

猜你喜欢

热点阅读