gpt4 book ai didi

objective-c - NSTimer 和重叠圈

转载 作者:行者123 更新时间:2023-12-03 17:56:38 25 4
gpt4 key购买 nike

我有一个 NSTimer,它作为秒表的基础。

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

我需要记录单圈时间,但我遇到了两个单独的单圈时间不应共享任何重叠的问题。

即,如果第 1 圈从 0.0 开始并于 10.0 结束,则第 2 圈应从 10.01 开始但在有圈的那一刻,我只需要当前时间,即可计算出上一圈的结束时间和新一圈的开始时间:

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

_startDate = [NSDate date];
}

我需要保存每圈的开始/结束时间以及总长度。但我不知道如何在不同圈的开始/结束时间相同的情况下做到这一点。

有人遇到过这个问题吗?任何想法如何我可以明智地解决它。我想到的一切都感觉很脆弱。

最佳答案

如果这是一个真正的单圈计时器,据我所知,那么你关于两个单独的圈数应该有间隙的假设是不准确的。具体来说,声明:

i.e if lap 1 starts at 0.0 and ends at 10.0, then lap 2 should start at 10.01

我对单圈计时器的理解是不正确的。第二圈立即开始,因为第 2 圈的起点与第 1 圈的终点相同。否则,您就会因为这些差距而浪费时间。

我建议只保存每个单独的时间。因此,如果您跑了 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 圈)的时间。

希望这是有道理的,而且在没有编译器检查的情况下我没有太多的拼写错误......

关于objective-c - NSTimer 和重叠圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12300830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com