iPhone - временная метка основного движения - PullRequest
0 голосов
/ 24 февраля 2011

Я использую основные движения в своем приложении.У меня есть объект motionManager, назначенный свойству в моем основном классе.Что-то вроде

@property (nonatomic, retain) CMMotionManager *motionManager;

каждый раз, когда я буду использовать движение ядра, я назначаю его, используя что-то вроде:

- (void) initializeCoreMotion {
    CMMotionManager *myMotionManager = [[CMMotionManager alloc] init];
    self.motionManager = myMotionManager;
    [myMotionManager release];
}

Затем, на методе, который выбирает эти данные, я должен прочитатьотметка времени выборки.

CMDeviceMotion *motion = self.motionManager.deviceMotion;       
timestamp = motion.timestamp;
if (firstTime) {
  timestampReference = timestamp;
  firstTime = NO;
} else {
  timestamp = timestamp - timestampReference;
}

То есть: при первой выборке сохраняется начальное значение.В последующие моменты выборки текущее значение будет вычитаться из ссылки, чтобы узнать, сколько секунд прошло.

Проблема заключается в следующем.Предположим, я пробую один раз в секунду.Я первый образец в течение 10 секунд.Таким образом, переменная метки времени будет иметь вид 0, 1, 2, 3, 4, 5 ... 10.Тогда я останавливаюсь и не пробую 20 секунд.Когда я начну пробовать снова.Во второй раз отметка времени начнется с 31, 32, 33, 34 ...

Я проверил метод выборки, и firstTime равен YES каждый раз, когда происходит первая выборка ...

любаямысли?Как мне это сбросить?

спасибо.

1 Ответ

1 голос
/ 25 февраля 2011

Кажется, хорошо, как ты это делаешь.Но почему вы создаете новый экземпляр CMMotionManager?Я использую:

if ([motionManager isDeviceMotionAvailable] && [motionManager isDeviceMotionActive]) {
    [motionManager stopDeviceMotionUpdates];
}

и для продолжения:

[motionManager startDeviceMotionUpdatesToQueue:operationQueue withHandler:deviceMotionHandler];

Мне было любопытно узнать, есть ли что-то не так в iOS с временными метками, и поэтому я просто опробовал ваш коданалогичная вещь с использованием статики.Все работает как положено.Может быть, ваш timestampReference перезаписан где-то еще?

...