場(chǎng)景描述
使用NSTimer計(jì)時(shí),到某個(gè)頁面停止計(jì)時(shí),退出這個(gè)頁面接著暫停的時(shí)間繼續(xù)計(jì)時(shí)募胃,到達(dá)預(yù)定時(shí)間完成某些操作择浊。
初始遇見的問題
在網(wǎng)上使用通用方法
-(void)pauseTimer{
[self setFireDate:[NSDate distantFuture]];
}
-(void)resumeTimer{
[self setFireDate:[NSDate date]];
}
@end
使用這種方法會(huì)導(dǎo)致暫停計(jì)時(shí)成功,但恢復(fù)計(jì)時(shí)的時(shí)候不是從上次暫停時(shí)間開始計(jì)算的,而是立即計(jì)時(shí)結(jié)束,執(zhí)行方法。
正確做法
-(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]];
}
}
這種做法可以從上次暫停的時(shí)間繼續(xù)計(jì)時(shí)工闺,達(dá)到預(yù)定時(shí)間后才執(zhí)行方法。