美文网首页iOS开发
NSTimer 暂停计时和恢复计时准确方法

NSTimer 暂停计时和恢复计时准确方法

作者: ruixinjia | 来源:发表于2019-08-12 10:32 被阅读0次

    场景描述

    使用NSTimer计时,到某个页面停止计时,退出这个页面接着暂停的时间继续计时,到达预定时间完成某些操作。

    初始遇见的问题

    在网上使用通用方法
    -(void)pauseTimer{
    [self setFireDate:[NSDate distantFuture]];
    }
    
    -(void)resumeTimer{
    [self setFireDate:[NSDate date]];
    }
    @end
    
    使用这种方法会导致暂停计时成功,但恢复计时的时候不是从上次暂停时间开始计算的,而是立即计时结束,执行方法。

    正确做法

    -(void)pauseTimer{
        if(self.timer){
           self.pauseStart = [NSDate dateWithTimeIntervalSinceNow:0];
            self.previousFireDate = [self.timer fireDate];
            [self.timer setFireDate:[NSDate distantFuture]];
        }
    }
    
    -(void)resumeTimer{
        if(self.timer){
            float pauseTime = -1*[self.pauseStart  timeIntervalSinceNow];
            [self.timer setFireDate:[NSDate dateWithTimeInterval:pauseTime sinceDate:self.previousFireDate]];
      }
    }
    
    这种做法可以从上次暂停的时间继续计时,达到预定时间后才执行方法。

    相关文章

      网友评论

        本文标题:NSTimer 暂停计时和恢复计时准确方法

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