iOS开发

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

2019-08-12  本文已影响0人  ruixinjia

场景描述

使用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]];
  }
}
这种做法可以从上次暂停的时间继续计时,达到预定时间后才执行方法。
上一篇 下一篇

猜你喜欢

热点阅读