如何检测iphone是不是还在?
Posted
技术标签:
【中文标题】如何检测iphone是不是还在?【英文标题】:how to detect if iphone is still?如何检测iphone是否还在? 【发布时间】:2013-02-11 18:26:06 【问题描述】:我必须制作一个用户只能在 iPhone 静止时拍照的应用程序。你能告诉我如何进行吗?任何帮助将不胜感激。
下面是我尝试过的代码,请提出改进建议,这段代码给出了生涩的输出
_previousMotionValue = 0.0f;
memset(xQueue, 0, sizeof(xQueue));
memset(yQueue, 0, sizeof(yQueue));
queueIndex = 0;
[_motionManager startAccelerometerUpdatesToQueue:_motionManagerUpdatesQueue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error)
if ([_motionManagerUpdatesQueue operationCount] > 1)
return;
xQueue[queueIndex] = -accelerometerData.acceleration.x;
yQueue[queueIndex] = accelerometerData.acceleration.y;
queueIndex++;
if (queueIndex >= QueueCapacity)
queueIndex = 0;
float xSum = 0;
float ySum = 0;
int i = 0;
while (i < QueueCapacity)
xSum += xQueue[i];
ySum += yQueue[i];
i++;
ySum /= QueueCapacity;
xSum /= QueueCapacity;
double motionValue = sqrt(xSum * xSum + ySum * ySum);
CGFloat difference = 50000.0 * ABS(motionValue - _previousMotionValue);
if (difference < 100)
//fire event for capture
[view setVibrationLevel:difference];
_previousMotionValue = motionValue;
];
根据振动水平,我设置了不同的图像,如绿色、黄色、红色。 我选择了阈值 100。
【问题讨论】:
【参考方案1】:回答“……用户只有在iPhone稳定后才能拍照……?”:
您可以使用CoreMotion.framework
及其CMMotionManager
获取有关设备移动的信息。 (我猜你对加速度计数据感兴趣。)这些数据将以高速率出现(你可以选择频率,默认为 1/60 秒)。然后你存储(比方说)10 个最新值,并对平均值和差异进行一些统计。通过选择最佳阈值,您可以判断设备何时处于稳定位置。
但是你提到了图像稳定,这和在稳定位置拍照是不一样的。为了稳定图像,我想您必须通过根据设备运动计算出的一些小偏移来调整捕获的图像。
【讨论】:
我试过类似的逻辑,你可以在更新的问题中找到,但它给出了生涩的输出。 尝试使用低通滤波器。一个包含在文档中的示例应用程序“AccelerometerGraph”中。当我们将它用于加速度计数据时,它会更好、更流畅。 总是有噪音影响运动传感器。你总是会得到少量的生涩动作。你必须弄清楚你可以处理的阈值。以上是关于如何检测iphone是不是还在?的主要内容,如果未能解决你的问题,请参考以下文章
如何检测 iPhone 6 设备的运动? (确定 iPhone 设备是不是移动 - x,y,z- 上的最小可能运动)
如何检测用户的 iPhone 6 Plus 是不是处于标准模式或缩放模式?