0

タイマーを分割したい のは、タイマーが実行されていることを意味し、ボタンをクリックするとタイマーの下にボタンが表示され、現在のタイマー時間が記録され、タイマーはその時点から進行し続け、このプロセスが繰り返されます

例: ストップウォッチ ラップ レジューム

4

1 に答える 1

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 を使用するのに適した場所があります :-)

于 2012-04-22T21:46:59.327 に答える