iPhone - 核心运动时间戳

Posted

技术标签:

【中文标题】iPhone - 核心运动时间戳【英文标题】:iPhone - core motion timestamp 【发布时间】:2011-02-24 12:10:07 【问题描述】:

我在我的应用上使用核心动作。我将 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】:

你这样做的方式似乎很好。但是为什么要创建一个新的 CMMotionManager 实例呢?我用:

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

然后继续:

[motionManager startDeviceMotionUpdatesToQueue:operationQueue withHandler:deviceMotionHandler];

我很想知道 ios 中的时间戳是否仍然存在问题,因此我只是使用静态测试了您的代码或类似的东西。一切都按预期工作。也许您的timestampReference 被其他地方覆盖了?

【讨论】:

这很奇怪,因为引用只在代码的一个分支中使用一次,然后被另一个分支读取。我会看看。我决定重新创建一个对象,因为我遇到了这个时间戳的问题。我会试试你的方法。谢谢。

以上是关于iPhone - 核心运动时间戳的主要内容,如果未能解决你的问题,请参考以下文章

如何将 NSDate 转换为 unix 时间戳 iphone sdk?

核心数据“修改”时间戳

创建会话 IOS 时出现 Quickblox“错误时间戳”错误

FFmpeg时间戳详解

如何将数据压缩到以时间戳开头的单行

navigator.geolocation 不返回 iOS 6 的有效时间戳