如何在iphone中暂停和恢复NSTimer

Har*_*tel 12 iphone objective-c nstimer nstimeinterval ios4

你好我正在开发小型gameApp.当用户进入另一个视图[说设置视图]时,我需要暂停计时器.当用户回到该视图时,我需要恢复计时器.

任何人都可以解决这个问题......

提前致谢...

tyb*_*103 8

NSTimer不会让您暂停它.但是,通过一些简单的变量,您可以自己创建效果:

NSTimer *timer;
double timerInterval = 10.0;
double timerElapsed = 0.0;
NSDate *timerStarted;

-(void) startTimer {
  timer = [NSTimer scheduledTimerWithTimeInterval:(timerInterval - timerElapsed) target:self selector:@selector(fired) userInfo:nil repeats:NO];
  timerStarted = [NSDate date];
}

-(void) fired {
  [timer invalidate];
  timer = nil;
  timerElapsed = 0.0;
  [self startTimer];
  // react to timer event here
}

-(void) pauseTimer {
  [timer invalidate];
  timer = nil;
  timerElapsed = [[NSDate date] timeIntervalSinceDate:timerStarted];
}
Run Code Online (Sandbox Code Playgroud)

这对我来说非常好.


Jus*_*Sid 5

你不能暂停计时器.但是,当用户进入设置视图时,您可以保存fireDate计时器以及当前日期.在此之后,您使计时器无效并让用户执行他/她的工作.一旦他/她切换回游戏,您将创建一个新的计时器对象,并将开火日期设置为旧的开火日期加上用户在菜单中的时间(oldTime + currentTime).


小智 5

您可以使用此代码在NSTimer中实现暂停和恢复功能

//=========new timer update method=============

-(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];
}
}
Run Code Online (Sandbox Code Playgroud)

在.h文件中声明NSDate startDate;

NSTimeInterval pauseTimeinterval; 并在viewdidload pausetimeInterval = 0.0; 祝好运