场景描述
使用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]];
}
}
这种做法可以从上次暂停的时间继续计时,达到预定时间后才执行方法。
网友评论