6

CMMotionManagerからCMDeviceMotionオブジェクトを取得 しています。CMDeviceMotion のプロパティの 1 つにタイムスタンプがあり、これは NSTimeInterval (double) として表現されます。ドキュメントによると、これにより「サブミリ秒」のタイムスタンプ精度が可能になります。

[motionManager startDeviceMotionUpdatesToQueue:motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) { 
  NSLog(@"Sample: %d Timestamp: %f ",counter,  motion.timestamp);
}

残念ながら、NSTimeInterval は最後のデバイスの起動以降に計算されるため、未加工の形式で使用することは非常に困難です。

この NSTimeInterval を Unix のようなタイムスタンプ (UTC タイムゾーン) に変換する作業コードを持っている人はいますか?

ありがとうございました!

4

2 に答える 2

15

磁力計の値を CoreMotion イベントと比較すると、同様の問題が発生しました。これらの NSTimeIntervals を変換したい場合は、オフセットを一度計算するだけです:

// during initialisation

// Get NSTimeInterval of uptime i.e. the delta: now - bootTime
NSTimeInterval uptime = [NSProcessInfo processInfo].systemUptime;

// Now since 1970
NSTimeInterval nowTimeIntervalSince1970 = [[NSDate date] timeIntervalSince1970];

// Voila our offset
self.offset = nowTimeIntervalSince1970 - uptime;
于 2011-09-28T12:13:44.350 に答える
2

モーションイベントを正しくシーケンスできるようにするための相対的な尺度として使用されることになっていると思います。そのため、可能な限り軽量な実装を目指しました。

モーションイベントはすべてすぐに処理されるため、モーションイベントの実際の日付と時刻が必要になる理由がわかりません。ただし、本当に必要な場合は、1 つのイベントのタイムスタンプを取得し、それを現在の日付と共に使用して基準日を計算し、基準日を使用して後続のイベントの実際の時間を導出する必要があります。

于 2011-09-27T22:18:36.373 に答える