如何检测iphone是否还在?

时间:2013-02-11 18:26:06

标签: ios objective-c motionevent image-stabilization

我必须制作一个应用程序,用户只有在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 个答案:

答案 0 :(得分:0)

要回答“...用户只能在iPhone稳定后拍照...?”

您可以使用CoreMotion.framework及其CMMotionManager获取有关设备移动的信息。 (我猜你对加速度计数据感兴趣。)这些数据将以高速率出现(你可以选择频率,默认为1/60秒)。然后你存储(让他们说)10个最新值,并对平均值和差异进行一些统计。通过选择最佳阈值,您可以判断设备何时处于稳定位置。


但是你提到了图像稳定,这与在稳定位置拍摄照片不同。为了稳定图像,我猜你必须通过从设备运动计算的一些小偏移来调整捕获的图像。