web-dev-qa-db-ja.com

iOSタイマーの作成

「ストップウォッチ」タイプの機能を作成しようとしています。 1つのラベル(経過時間を表示する)と2つのボタン(タイマーの開始と停止)があります。開始ボタンと停止ボタンは、それぞれstartTimer関数とstopTimer関数を呼び出します。毎秒、タイマーが作動し、increaseTimerCount関数を呼び出します。秒単位の経過時間を保持するivar timerCountもあります。

- (void)increaseTimerCount
{
    timerCountLabel.text = [NSString stringWithFormat:@"%d", timerCount++];
}

- (IBAction)startTimer
{
    timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(increaseTimerCount) userInfo:nil repeats:YES];

}

- (IBAction)stopTimer
{
    [timer invalidate];
    [timer release];
}

問題は、スタートボタンが押されたときに遅延があるように見えることです(これは、startTimerが呼び出されるたびにタイマーを再初期化するためであると想定しています)。タイマーを無効にして再作成せずに、タイマーを一時停止して再開する方法はありますか?またはこれを行うより良い/代替方法?

ありがとう。

18
v0idless

invalidateを使用せずにタイマーを一時停止することはできません。あなたができることは追加することです

[timer fire];

startTimerにタイマーを作成した後。

9

少し時代遅れですが、誰かがまだ興味があるなら...

タイマーを「停止」するのではなく、一時停止中にインクリメントを停止します。

- (void)increaseTimerCount
{
   if (!self.paused){
      timerCount++
   }

   timerCountLabel.text = [NSString stringWithFormat:@"%d", timerCount];
}
11
vladz