2013-02-11 105 views
-2

我必須製作一個應用程序,用戶只有在iPhone尚未使用時才能拍照。您能否告訴我如何繼續。任何幫助將不勝感激。如何檢測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

要回答「......用戶可以拍照,只有當iPhone是穩定的......?」:

您可以使用CoreMotion.framework及其有關設備運動CMMotionManager獲得信息。 (我想你對加速度計數據很感興趣。)這些數據會以很高的速度出現(你可以選擇頻率,默認情況下爲1/60秒)。然後你存儲(比方說)10個最新值,並對平均值和差值進行一些統計。通過選擇最佳閾值,您可以知道設備何時處於穩定位置。


但你提到防抖,這是不一樣的穩定位置拍照。爲了穩定圖像,我想你必須通過從設備運動計算出來的一些小偏移量來調整捕捉的圖像。

+0

我試過類似的邏輯,你可以在更新後的問題中發現,但它給出了生澀的輸出。 – 2013-02-11 19:05:05

+1

嘗試使用低通濾波器。其中一個包含在文檔中的示例應用程序「AccelerometerGraph」中。當我們將它用於加速計數據時,它會更好,更順暢。 – Tricertops 2013-02-11 19:48:12

+0

總是會有噪音影響運動傳感器。你總是會得到少量的生澀運動。你必須找出你可以處理的門檻。 – Fogmeister 2013-02-11 20:23:01

相關問題