0

ストップウォッチの基礎として機能する NSTimer があります。

- (void)startTimer
{
    _startDate = [NSDate date];
    _timer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0
                                              target:self 
                                            selector:@selector(updateTimer) 
                                            userInfo:nil 
                                             repeats:YES];
}

ラップタイムを記録する必要がありますが、2 つの別々のラップタイムが重複してはならないという問題に直面しています。

つまり、ラップ 1 が 0.0 で開始し、10.0 で終了する場合、ラップ 2 は 10.01 で開始する必要があります。しかし、ラップがある瞬間に、前のラップの終わりと新しいラップの開始の両方を解決するために、現在の時間を取得します。 1:

- (void)lap
{
    NSTimeInterval timeInterval = [[NSDate date] timeIntervalSinceDate:_startDate];
    timeInterval += _timeElapsed;

    _startDate = [NSDate date];
}

各ラップの開始/終了時間と合計の長さを保存する必要があります。しかし、異なるラップで開始/終了時間を同じにしないと、これを行う方法がわかりません。

誰かがこの問題に遭遇しましたか? どうすれば賢明に解決できるかについてのアイデア。私が考えるすべては非常にもろく感じます。

4

1 に答える 1

1

私が理解しているように、それが真のラップタイマーである場合、2つの別々のラップにギャップがあるはずであるというあなたの仮定は正確ではありません. 具体的には、ステートメント:

つまり、ラップ 1 が 0.0 で開始し、10.0 で終了する場合、ラップ 2 は 10.01 で開始する必要があります。

ラップタイマーについての私の理解には正しくありません。ラップ 2 の開始はラップ 1 の停止と同じであるため、2 番目のラップがすぐに開始されます。そうしないと、それらのギャップで時間を失うことになります。

個々の時間だけを保存することをお勧めします。したがって、5 周した場合は、サイズ タイムが発生するはずです (常にゼロから開始する場合は 5 周)。これで、各ラップの開始と終了のタイム マーキングができました。

0.00
10.03
20.04
30.09
40.20
50.33

合計タイムは 50.53 で、3 周目のタイムは 10.05 (30.09 - 20.04) です。すべての個々のラップの合計は、合計時間と等しくなければなりません。

これで、合計時間と各ラップの時間が簡単にわかります。これらの値が配列に格納されているふりをすると、簡単に実行できます。

- (void)startStopLap {
    // compute elapsed time...
    [self.times addObject:[NSNumber numberWithDouble:elapsedTime]];
}

- (double)totalTime {
    [[self.times lastObject] doubleValue]
        - [[self.times objectAtIndex:0] doubleValue];
}

- (double)timeForLap:(NSUInteger)lap {
    // Example assumes first lap is lap '1' and that you do
    // appropriate error checking...
    return [[self.times objectAtIndex:lap] doubleValue]
         - [[self.times objectAtIndex:lap-1] doubleValue];
}

同様に、単純な減算で最初の N ラップのタイムを取得でき、特定の範囲のラップ (つまり、2 ~ 4 ラップ) のタイムを取得できます。

うまくいけば、それは理にかなっており、チェックするコンパイラがなければ、あまり多くのタイプミスはありません...

于 2012-09-06T14:06:16.537 に答える