iphone秒表圈分裂

时间:2012-04-04 11:22:25

标签: iphone ios

我想拆分计时器 表示计时器正在运行 并且计时器下面会有一个按钮 当单击该按钮时,会记录当前的计时器时间,并且计时器继续从该点开始 并且这个过程重复

例如秒表圈恢复

1 个答案:

答案 0 :(得分:0)

我是直线解决方案的倡导者。

#import <mach/mach_time.h>

...
NSMutableArray *_stampsArray = [[NSMutableArray alloc] initWithCapacity: 10];

每次“按压”保存当前系统时间

[_stampsArray addObject: [NSNumber numberWithUnsignedLongLong: mach_absolute_time()];

并最终计算单圈时间

unsigned int lap = ... // 1 .. n
static struct mach_timebase_info timebase_info;
if(timebase_info.denom == 0) {
  mach_timebase_info(&timebase_info);
}
unsigned long long _timeStampStart = [_stampsArray objectAtIndex: lap -1];
unsigned long long _timeStampStop  = [_stampsArray objectAtIndex: lap];
unsigned long long _timeInterval = _timeStampStop - _timeStampStart;
_timeInterval *= timebase_info.numer;
_timeInterval /= timebase_info.denom;

_timeInterval /= 1000*1000*10; // resolution will be 1/100 sec. now

显示结果,你可以

int _decimalSec = _timeInterval % 100;
int _sec = (_timeInterval / 100) % 60;
int _min = (_timeInterval / (100 * 60)) % 60;
int _hour = (_timeInterval / (100 * 60 * 60));// % 24; 
NSString* formatedAsLapTime = [NSString stringWithFormat:@"%d:%02d:%02d.%02d", _hour, _min, _sec,_decimalSec];

显示实际经过的时间,只计算差异

unsigned long long _elapsed = mach_absolute_time() - [_stampsArray objectAtIndex: 0];

并根据需要以任何固定间隔(刷新率)使用UI中的值。有一个使用NSTimer的好地方: - )