我正在将一款最初在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 actual events per second 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. 我没有进行任何会阻塞进程的重要处理,只是等待运动事件并记录它们。这在作为加速度计的委托时完全正常工作。