正在恢复暂停的NSTimer



因此,在查看了该网站上可能的每个NSTimer暂停/恢复后,在恢复计时器方面,我什么都不起作用。暂停和启动计时器工作完美,没有任何问题。另一方面,Resume函数什么都没有。

我的计时器由调用

[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,还是有更好的暂停和恢复方式?

为什么不使当前计时器无效并创建一个新的计时器实例?

类似:

-(void)pauseTimer
{
    [tickerTimer invalidate];
}
-(void)resumeTimer
{
    tickerTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(runTimer) userInfo:nil repeats:YES];
}

您不能暂停计时器。但是,当用户进入设置视图时,可以保存计时器的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; 

如果你遇到什么问题,请告诉我。

最新更新