NSTimer倒计时跳过最后一秒(不使用最后一毫秒)

时间:2013-09-27 19:39:21

标签: iphone ios xcode nstimer countdown

我有一个NS计时器倒计时,由于你的答案,它完全正常。但是,我的计时器会跳过最后一秒,因此它不会计算最后的0秒:99毫秒。我的代码有什么问题吗?最好的问候!

-(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;






}

2 个答案:

答案 0 :(得分: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];


}

答案 1 :(得分: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;

}