2012-09-06 60 views
0

我有一個NSTimer作爲秒錶的基礎。NSTimer和重疊圈

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

我需要記錄單圈時間,但我遇到了兩個單獨的圈時間不應該共享任何重疊的問題。

即如果第一圈從0.0開始到10.0結束,那麼第二圈應該從10.01開始 但是在有圈的時候,我只需要花時間來計算前一圈的結束時間和新的開始:

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

    _startDate = [NSDate date]; 
} 

我需要保存每圈的開始/結束時間以及他們的總長度。但是我不知道如何在不同的圈數開始/結束時間相同的情況下做到這一點。

有沒有人遇到過這個問題?任何想法,我可以明智地解決它。我想到的每件事都感覺非常脆弱。

+0

如果我理解正確的...你的計時器開始....時間1分鐘時停,第二圈時間5分鐘,那麼你的第一圈應該是1分鐘,你的第二圈應該是4分鐘......是嗎? – Neo

+0

這真的是我的大腦下沉。我想是這樣。 – Cameron

+0

我想我有點困惑自己。我在想,如果你想知道哪一圈精確的時間到了,你怎麼知道任何給定圈的開始和結束時間是否可以相同。即第一圈爲10.0,第二圈爲10.0 – Cameron

回答

1

如果它是一個真正的圈計時器,據我所知,那麼你的假設,兩個單獨的圈應該有一個差距,他們不準確。具體地,語句:

即如果棉卷1點開始在0.0和10.0處結束,那麼搭接2應該在10.01

開始 是不正確我的一個圈定時器的理解。第二圈立即開始,因爲第二圈的開始與第一圈的開始相同。否則,你會因這些差距而失去時間。

我建議只保存每個單獨的時間。所以,如果你跑了5圈,應該有尺寸乘以5(如果你總是從零開始)。你現在有一個時間標記的開始和每圈的結束。

0.00 
10.03 
20.04 
30.09 
40.20 
50.33 

總時間爲50.53,第三圈的時間爲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圈)。

希望,這是有道理的,如果你的第一圈,我不爲零有錯別字太多沒有編譯器檢查...

+0

非常感謝 - 這真的幫了我很大的忙。我想我以某種方式想過這件事! – Cameron