恢复暂停的NSTimer

时间:2013-06-25 11:32:20

标签: ios

因此,在查看本网站上可能的每个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,还是有更好的方法来暂停和恢复?

2 个答案:

答案 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; 

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