无论设备旋转如何,都可以检

时间:2014-09-12 10:19:41

标签: ios core-motion

无论用户如何握住手机,我都会搜索一种检测手机移动的方法。

一些例子:

  • 我对垂直移动感兴趣(就像用户拉电话一样)'忽略'如果手机放在桌子上或握在手中(可能是颠倒的)。
  • 也对水平移动感兴趣(就像用户将手机推离身体一样)也忽略了#39;用户如何握住手机。

背景是我想识别用户是否将手机从口袋中取出(例如向上拉30-40厘米,也可以在水平方向上拉几厘米)。

我认为因此我必须从userAcceleration和态度中获得一个组合。但我找不到正确的数学..

2 个答案:

答案 0 :(得分:1)

不确定“正确的数学”是什么意思。但我会读出加速度计并总结所有3个方向(x / y / z)的绝对值。这将为您提供单个加速度数,与手机方向或移动方向无关。

更好的是计算RMS加速度,即求和x / y / z加速度的平方并计算总和的平方根。

这种方法的明显缺点是它不会提供有关运动方向的信息。您可以添加一些阈值或过滤来区分单个线性运动与抖动(例如,通过测量两个加速事件之间的时间)。

此外,您可以确定高度的变化(这与手机的方向无关),但我怀疑是否可以精确测量30 ... 40 cm的差异。

答案 1 :(得分:0)

如果您的应用位于前台,则可以执行此操作。您可以使用UIDeviceOrientationLandscapeLeftUIDeviceOrientationLandscapeRight以及UIDeviceOrientationPortraitUpsideDown/UIDeviceOrientationPortrait来检测手机认为的景观,并从中调整计算移动的方式。

手机拿起时可能会移动。使用加速度计进行的这种改变可能会让您了解手机的移动方式。这需要大量的测试。我会设置您的练习应用程序并获取大量有关屏幕方向更改的数据,以及加速度计在每次更改时的行为方式以及查找趋势。