今天在自定义视频播放器中的进度条时,发现之前完成的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];
...
}
也就是在每次执行方法之前,先把之前的延迟取消掉,这样,如果在上一次延迟还没走完的情况下,再一次执行这个方法的时候,就不会像之前那样继续上次的延迟时间了。
如果小伙伴们有更好的解决办法,欢迎交流~