我必须制作一个应用程序,用户只有在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。
答案 0 :(得分:0)
要回答“...用户只能在iPhone稳定后拍照...?”:
您可以使用CoreMotion.framework
及其CMMotionManager
获取有关设备移动的信息。 (我猜你对加速度计数据感兴趣。)这些数据将以高速率出现(你可以选择频率,默认为1/60秒)。然后你存储(让他们说)10个最新值,并对平均值和差异进行一些统计。通过选择最佳阈值,您可以判断设备何时处于稳定位置。
但是你提到了图像稳定,这与在稳定位置拍摄照片不同。为了稳定图像,我猜你必须通过从设备运动计算的一些小偏移来调整捕获的图像。