2013-09-27 72 views
0

我有一个NS定时器倒计时,它完美地工作得很好,这要归功于你的答案。但是,我的计时器跳过了最后一秒,因此它不会计算最后0秒:99毫秒。我的代码有什么问题吗?最好的祝福!NSTimer倒计时跳过上一秒(不使用最后毫秒)

-(void) setTimer { 
    MySingletonCenter *tmp = [MySingletonCenter sharedSingleton]; 
    tmp.milisecondsCount = 99; 
    tmp.secondsCount = 2; 



    tmp.countdownTimerGame = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(timerRun) userInfo:nil repeats:YES]; 


} 

-(void) timerRun { 
    MySingletonCenter *tmp = [MySingletonCenter sharedSingleton]; 
    tmp.milisecondsCount = tmp.milisecondsCount - 1; 



    if(tmp.milisecondsCount == 0){ 
     tmp.secondsCount -= 1; 


     if (tmp.secondsCount == 0){ 

      //Stuff for when the timer reaches 0 

      [tmp.countdownTimerGame invalidate]; 
      tmp.countdownTimerGame = nil; 
      tmp.lives = tmp.lives - 1; 
      NSString *newLivesOutput = [NSString stringWithFormat:@"%d", tmp.lives]; 
      livesLabel.text = newLivesOutput; 
      if (tmp.lives == 0) { 
       timeLabel.text = @"0:00"; 
       [self performSelector:@selector(stopped) withObject:nil afterDelay:2.0]; 

      } 
      else {[self setTimer]; } 
     } 
     else 

      tmp.milisecondsCount = 99; 
    } 


    NSString *timerOutput = [NSString stringWithFormat:@"%2d:%2d", tmp.secondsCount, tmp.milisecondsCount]; 

    timeLabel.text = timerOutput; 






} 

回答

0

尝试改变这种

-(void) setTimer { 
    MySingletonCenter *tmp = [MySingletonCenter sharedSingleton]; 
    tmp.milisecondsCount = 100;// Change this from 99 to 100 
    tmp.secondsCount = 2; 



    tmp.countdownTimerGame = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(timerRun) userInfo:nil repeats:YES]; 


} 
+0

我已经试过了。但它不起作用。无论如何感谢您的回答。 –

0

一开始,摆脱

else {[self setTimer]; } 

否则,你每次重新启动计时器,选择火灾。

下一页:交换这两个围绕

tmp.secondsCount -= 1; 

    if (tmp.secondsCount == 0){ 

else { 
    tmp.secondsCount -= 1; 
    tmp.milisecondsCount = 99; 
} 

像这样:

-(void) timerRun { 
    MySingletonCenter *tmp = [MySingletonCenter sharedSingleton]; 
    tmp.milisecondsCount = tmp.milisecondsCount - 1; 

    if(tmp.milisecondsCount == 0){ 

     if (tmp.secondsCount == 0){ 

      //Stuff for when the timer reaches 0 

      [tmp.countdownTimerGame invalidate]; 
      tmp.countdownTimerGame = nil; 
      tmp.lives = tmp.lives - 1; 
      NSString *newLivesOutput = [NSString stringWithFormat:@"%d", tmp.lives]; 
      livesLabel.text = newLivesOutput; 
      if (tmp.lives == 0) { 
       timeLabel.text = @"0:00"; 
       [self performSelector:@selector(stopped) withObject:nil afterDelay:2.0]; 

      } 
     } 
     else 
     { 
      tmp.milisecondsCount = 99; 
      tmp.secondsCount -= 1; 
     } 
    } 

    NSString *timerOutput = [NSString stringWithFormat:@"%2d:%2d", tmp.secondsCount, tmp.milisecondsCount]; 

    timeLabel.text = timerOutput; 

}