5 iphone objective-c ios core-motion cmmotionmanager
编辑:添加了一个全局,现在它正在工作。但我仍然有疑问..请继续阅读:)
我想在需要时在 Y 轴上进行加速,并在代码的不同部分使用它。在这个例子中,我在一个 while 循环中使用它来进行测试。
我的代码正在运行,但我是否正确使用了 UpdateToQueue... 方法,还是这种实现我想要的“非正统”方式?
我已将更新间隔设置为 30 毫秒,您认为这是“安全”更新间隔吗?有人告诉我,我在选择时应该小心,因为当前或以后的硬件/iOS 更新可能无法跟上这样的时间间隔,这是真的吗?
double myAcceleration; // a global..
-(void) play // my "main" method..
{
CMMotionManager *motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 0.03; // update every 30ms
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:^(CMDeviceMotion *motion, NSError *error)
{
myAcceleration = motion.userAcceleration.y;
}
];
while(!self.stopButtonPressed)
{
NSLog(@"Y-Axis acceleration is %f", myAcceleration);
}
}
Run Code Online (Sandbox Code Playgroud)
最后。我找到了我自己问题的答案:)
\n\n苹果文档:
\n\n\n\n\n选择运动事件更新间隔
\n\n当您使用 Core Motion 请求运动数据时,您可以指定更新间隔。您应该选择满足您的 app\xe2\x80\x99s 需求的最大间隔。间隔越大,传递到应用程序的事件就越少,从而延长电池寿命。
\n\n表 4-1 列出了一些常见的更新频率,并说明了您可以对以该频率生成的数据执行哪些操作。很少有应用需要每秒传送 100 次加速事件。
\n\n事件频率 (Hz) 使用情况
\n\n10\xe2\x80\x9320\n 适用于确定设备\xe2\x80\x99s当前方向向量。
\n\n30\xe2\x80\x9360\n 适用于使用加速度计进行实时用户输入的游戏和其他应用程序。
\n\n70\xe2\x80\x93100\n 适合需要检测高频运动的应用。例如,您可以使用此间隔来检测用户快速击打或摇动设备。
\n\n您可以将报告间隔设置为小至 10 毫秒 (ms),这对应于 100 Hz 更新率,但大多数应用程序在较大的间隔下即可充分运行。
\n
简而言之,正如博格丹所说:10Hz-100Hz
\n\n来源:选择运动事件更新间隔
\n小智 3
这样使用就可以了。
关于时间间隔:当前最大更新限制为100Hz(每秒100次,0.01秒一次加速度计更新),最小为10Hz(AFAIK)。如果您将时间间隔设置在这样的范围内,那么当前和下一版本的苹果设备肯定会支持它。但你不能依赖默认的时间间隔并祈祷它在任何地方都相同,因为苹果可能会改变最小和最大(例如,一些新的IC芯片将支持500Hz刷新率)范围,因此默认也会改变。
| 归档时间: |
|
| 查看次数: |
6091 次 |
| 最近记录: |