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?