因此,在查看本网站上可能的每个NSTimer暂停/恢复后,在恢复计时器方面没有任何对我有用。暂停和启动计时器可以毫无问题地完美运行。另一方面,恢复功能没什么。
我的计时器由
调用[tickerTimer invalidate];
tickerDate = [NSDate date];
tickerTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(runTimer) userInfo:nil repeats:YES];
计时器本身
-(void)runTimer {
NSTimeInterval interval = [tickerDate timeIntervalSinceNow];
seconds = ABS((int)interval);
minutes = seconds/60;
hours = minutes/60;
hhmmssLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes%60, seconds%60];
}
暂停功能
pauseStart = [NSDate dateWithTimeIntervalSinceNow:0];
previousFireDate = [tickerTimer fireDate];
NSDate *date = [NSDate distantFuture];
[tickerTimer setFireDate:date];
最后那个不起作用的简历是
float pauseTime = -1*[pauseStart timeIntervalSinceNow];
[tickerTimer setFireDate:[NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate]];
我是否错误地使用了fireDate,还是有更好的方法来暂停和恢复?
答案 0 :(得分:2)
为什么不使当前计时器无效并创建新的计时器实例?
像:
-(void)pauseTimer
{
[tickerTimer invalidate];
}
-(void)resumeTimer
{
tickerTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(runTimer) userInfo:nil repeats:YES];
}
答案 1 :(得分:0)
您无法暂停计时器。但是,当用户转到设置视图时,您可以保存计时器的fireDate以及当前日期。在此之后,您使计时器无效并让用户执行他/她的工作。一旦他/她切换回游戏,您将创建一个新的计时器对象,并将开火日期设置为旧的开火日期加上用户在菜单中的时间(oldTime + currentTime)。
您可以使用此代码在NSTimer中实现暂停和恢复功能
// =========新计时器更新方法=============
-(void) updateTimer {
NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"mm:ss.S"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
NSString *timeString = [dateFormatter stringFromDate:timerDate];
lblMessage.text = timeString;
pauseTimeInterval = timeInterval;
}
-(IBAction) startBtnPressed:(id)sender
{
//=============================new update with start pause==================
if(running == NO) {
running = YES;
startDate = [NSDate date] ;
startDate = [[startDate dateByAddingTimeInterval:((-1)*(pauseTimeInterval))] retain];
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];
}
else {
running = NO;
[stopWatchTimer invalidate];
stopWatchTimer = nil;
[self updateTimer];
}
}
在.h文件中声明NSDate startDate;
NSTimeInterval pauseTimeinterval; and in viewdidload pausetimeInterval=0.0;
如果你遇到问题,请告诉我。