如何在面朝上时检测iPhone是否正在旋转?

时间:2010-03-16 23:15:53

标签: iphone orientation detect rotation

有没有办法检测躺在桌子上的iphone是否正在旋转?我确实意识到加速度计没有报告这种运动,也没有报告 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation方法。

有没有办法检测手机旋转的角度变化?谢谢。

4 个答案:

答案 0 :(得分:9)

重力矢量在平台上旋转时将保持不变,因此您不会在加速度计上看到任何内容。您可以按照罗盘方向更改来检测此旋转,但仅限于iPhone 3G S.有关详细信息,请参阅CLLocationManager,查看标题方法。

编辑 - 使用iPhone 4,您可以使用陀螺仪检测旋转。 iOS 4中有一个名为CMMotionManager的新类,用于从陀螺仪中获取rotation rate

答案 1 :(得分:5)

当手机静止时,加速度矢量的总和应为+1。当手机正在旋转时(假设传感器偏离中心),矢量的总和应该大于1并且(希望)有些恒定。

如果你观察那条曲线的衰减,如果这个形状足够独特,可以用来判断手机是否在旋转,我不会感到惊讶。

alt text http://i39.tinypic.com/14vnztx.png

这是Apple的AccelerometerGraph示例应用。

答案 2 :(得分:4)

如果iPhone有罗盘,我想你可以做到。除此之外,我认为不可能或不可靠。

答案 3 :(得分:2)

这实际上取决于加速度计在设备上的位置,我只是使用2g itouch上的加速度计示例应用程序对此进行了测试,您可以看到x和y轴上的初始加速度(2g没有我猜测设备中心的加速度计。所以从某种意义上说,你可以检测到旋转,但我认为挑战在于将加速度与方向加速度区分开来。如果苹果将加速度计放置在不同型号的不同位置,我相信这些值会发生变化。绝对不会通过shouldAutorotateToInterfaceOrientation进行任何操作,我建议你在sdk中加载accelerometergraph样本应用程序并试验加速度向量,看看你是否可以在多个设备上可靠地隔离旋转向量。