2012-09-06 73 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