我在我的应用上使用核心动作。我将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 ...
任何想法?我该如何重置?
感谢。
答案 0 :(得分:1)
看起来你做得很好。但是为什么要创建CMMotionManager的新实例?我用:
if ([motionManager isDeviceMotionAvailable] && [motionManager isDeviceMotionActive]) {
[motionManager stopDeviceMotionUpdates];
}
并继续:
[motionManager startDeviceMotionUpdatesToQueue:operationQueue withHandler:deviceMotionHandler];
我很想知道iOS中是否还有一些错误的时间戳,因此我只是尝试使用静态代码或类似的东西。一切都按预期工作。也许你的timestampReference
会被其他地方覆盖?