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

场景描述

使用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]];
  }
}
这种做法可以从上次暂停的时间继续计时,达到预定时间后才执行方法。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,907评论 1 32
  • 1. 什么是NSTimer   官方的解释“A timer provides a way to perform a...
    Timir阅读 4,404评论 0 3
  • NSTimer是iOS最常用的定时器工具之一,在使用的时候常常会遇到各种各样的问题,最常见的是内存泄漏,通常我们使...
    bomo阅读 5,065评论 0 7
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 13,364评论 0 13
  • 一、在后台工作量少 当用户没有主动使用你的应用程序时,系统会将其转换为背景状态。该系统最终可能会暂停您的应用程序,...
    弗利撒阅读 4,438评论 1 0

友情链接更多精彩内容