我有一个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;
}
答案 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;
}