我正在移植一个我最初使用 IOS 3 的加速度计编写的应用程序,以整合新的 IOS 4 运动功能。
在捕捉动作时,该应用程序几乎没有做其他事情——例如没有图形更新。
我正在执行以下操作来设置运动更新,以替代我之前使用的加速度计。我确实意识到我可以重建以使用 NSTimer 或其他东西进行自己的投票,并且可能会继续这样做。
[motionManager setDeviceMotionUpdateInterval:updateInterval];
CMDeviceMotionHandler motionHandler = ^(CMDeviceMotion *motion, NSError *error) {
[self processMotion:motion withError:error];
};
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:motionHandler];
这可行,但更新间隔没有按预期运行。我已经删除了 processMotion 方法中的所有执行代码,除了保存时间戳以查看实际运动更新率是多少。我已经对此进行了足够的测试,以向自己证明它是可重复的,即使是 1/40 的奇怪结果。下表显示了我所看到的:
updateInterval 每秒实际事件数 1.0/20.0 13 1.0/30.0 27 1.0/40.0 27 1.0/50.0 34 1.0/60.0 40 1.0/70.0 57 1.0/90.0 60 1.0/100.0 74
一些注意事项:
1.我确定更新间隔设置正确,并在设置后检查确认。
2. 我确定我正在跟踪 processMotion 的每个调用,没有任何调用 nil CMDeviceMotion 或其他奇怪的
东西 3. 我没有做任何会阻止事情的重要处理,只是等待运动事件并记录下来。作为加速度计的代表,这一切都非常好
4. 运动数据很好,只是更新频率太低 :)
5. 这是在 ipod touch 第 4 代 6 上使用 ios 4.2
。我已经尽我所能进行搜索,避风港没有看到解释,尽管我看到一些报告说人们在请求 60hz 时看到 50hz 更新频率,这可能是相关的。
我将尝试的下一件事是为处理设置一个专用队列,而不是使用当前队列,但是我确实想看看这是否是已知行为。我可以理解更新率是否以某种方式受到瓶颈,但不确定为什么它仍然会按比例放大,如果是这样的话。
同样,我想我可以重建以使用 NSTimer 并进行自己的轮询,但我想了解为什么我会看到这个,以防我从根本上误解了 Core Motion 框架。