iPhone - 核心动作时间戳

时间:2011-02-24 12:10:08

标签: iphone core-motion

我在我的应用上使用核心动作。我将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秒钟。所以timestamp变量将变为0,1,2,3,4,5 ...... 10。然后我停下来,不抽样20秒。当我再次开始采样时。第二次,时间戳将从31,32,33,34 ...

开始

我检查了采样方法,每次第一次采样时firstTime为YES ...

任何想法?我该如何重置?

感谢。

1 个答案:

答案 0 :(得分:1)

看起来你做得很好。但是为什么要创建CMMotionManager的新实例?我用:

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

并继续:

[motionManager startDeviceMotionUpdatesToQueue:operationQueue withHandler:deviceMotionHandler];

我很想知道iOS中是否还有一些错误的时间戳,因此我只是尝试使用静态代码或类似的东西。一切都按预期工作。也许你的timestampReference会被其他地方覆盖?