1

カウント ダウン ラベルを作成しようとしていますが、デクリメントされません。コード内のエラーを特定できる人はいますか?

- (IBAction)start:(id)sender
{
     timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self   selector:@selector(updateCountdown) userInfo:nil repeats: YES];
}

-(void) updateCountdown
{
     int hours, minutes, seconds;
     int secondsLeft = 30;
     hours = secondsLeft / 3600;
     minutes = (secondsLeft % 3600) / 60;
     seconds = (secondsLeft %3600) % 60;
     countDownlabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
}
4

4 に答える 4

6

タイマーが起動するたびに、秒に同じ値を使用するため int secondsLeft=30;

Timer の開始時に secondsLeft の値を設定し、タイマーで値を減らす必要があります

- (IBAction)start:(id)sender{

  timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self   selector:@selector(updateCountdown) userInfo:nil repeats: YES];

  secondsLeft=30;
 }

 -(void) updateCountdown {
    int hours, minutes, seconds;

    secondsLeft--;
    hours = secondsLeft / 3600;
    minutes = (secondsLeft % 3600) / 60;
    seconds = (secondsLeft %3600) % 60;
    countDownlabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
于 2013-01-25T11:04:22.583 に答える
3

を宣言secondsLefttimer、ivar として、呼び出されるsecondsLeftたびにデクリメントし、デクリメントする秒数が残っていないときにupdateCountdownを無効にすることができます。timer

- (IBAction)start:(id)sender
{
    secondsLeft = 30;
    timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self   selector:@selector(updateCountdown) userInfo:nil repeats: YES];
}

- (void) updateCountdown
{
    int hours, minutes, seconds;

    hours = secondsLeft / 3600;
    minutes = (secondsLeft % 3600) / 60;
    seconds = (secondsLeft %3600) % 60;
    countDownlabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
    secondsLeft--;

    if (seconds==0)
    {
        [timer invalidate];
    }
}
于 2013-01-25T11:14:25.340 に答える
1

通常の方法で割り当てint secondsLeft=30;ました。updateCountdown

secondLeft の初期値を別の場所に設定してから、メソッドでそのupdateCountdown値をデクリメントする必要があります

 -(void) updateCountdown {
    int hours, minutes, seconds;

    hours = secondsLeft / 3600;
    minutes = (secondsLeft % 3600) / 60;
    seconds = (secondsLeft %3600) % 60;
    countDownlabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
    if (secondsLeft > 0) secondsLeft--;
}
于 2013-01-25T11:01:18.043 に答える
0

私は問題を見つけました...

-(IBAction)start:(id)sender{


countDownView.hidden=NO;

timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateElapsedTime) userInfo:nil repeats:YES];
secondsLeft=30;

}



 -(void) updateCountdown {
int hours, minutes, seconds;


hours = secondsLeft / 3600;
minutes = (secondsLeft % 3600) / 60;
seconds = (secondsLeft %3600) % 60;
countDownlabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];

}
于 2013-01-25T11:45:41.797 に答える