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];  
    ...
}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,791评论 25 709
  • Objective-C中有两个NSObject,一个是NSObject类,另一个是NSObject协议。而其中NS...
    ScaryMonsterLyn阅读 4,079评论 0 2
  • 源码来源:gitHub源码 转载于: CocoaChina 来源:南峰子的技术博客 版本:0.9.1 MBPr...
    李小六_阅读 11,505评论 2 5
  • !!!注意:因为简书的显示格式缘故,所以“ * ”显示会出现问题,可能有些星号由于疏忽未改动格式,造成没有显示,请...
    Eric_Hunter阅读 4,181评论 0 0
  • 作为一个二十三岁的姑娘,我的人生中没有高跟鞋。 我总是穿着各式各样的板鞋运动鞋帆布鞋,准备随时随地跑起来。 我其实...
    四块八阅读 1,794评论 0 0