4

我正在使用iBeacons構建一個基於室內位置的應用程序,但是我爲了獲得準確的運動表示(速度,方向等)而使用了很多iPhone傳感器,與CoreMotion計步器和它的步計數屬性。我有一段代碼只是簡單地計算這些步驟並將它們打印在一個標籤中,並且我注意到在設備註冊我的移動之前需要大約10個步驟,然後每隔三或四步更新一次標籤。這些更新在「行走」狀態是好的,但我很想知道是否有可能加速初始響應和從靜止 - >步行轉換,而不是10將其降低到5,這是可以接受的。這是計算步驟的代碼:在iOS上增加計步器的初始響應

if(CMPedometer.isStepCountingAvailable()){ 

     self.pedoMeter.queryPedometerDataFromDate(NSDate(), toDate: NSDate()) { (data : CMPedometerData!, error) -> Void in 
      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       if(error == nil){ 
        self.steps.text = "\(data.numberOfSteps)" 
       } 
      }) 

     } 


     self.pedoMeter.startPedometerUpdatesFromDate(NSDate()) { (data: CMPedometerData!, error) -> Void in 
      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       if(error == nil){ 
        self.steps.text = "\(data.numberOfSteps)" 
       } 
      }) 
     } 

    } 
} 

我也增加了更新間隔最大

manager.deviceMotionUpdateInterval = 0 

而且這些都是我使用

let activityManager = CMMotionActivityManager() 
let manager = CMMotionManager() 
let pedoMeter = CMPedometer() 

回答

3

您可以在類這樣做是因爲Apple根據您使用的設備對更新時間間隔有限制。你可以擁有的最大間隔是0.01秒。計步器通常在較長的距離上工作得更好,您應該使用加速計數據。

0
self.pedoMeter.startPedometerUpdatesFromDate(NSDate()) { (data: CMPedometerData!, error) -> Void in 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     if(error == nil){ 
      self.steps.text = "\(data.numberOfSteps)" 
     } 
    }) 
} 

不能調用startPedometerUpdatesFromDate得到錯誤的SWIFT 2.0,但在迅疾1.2工作正常。

+0

感謝您的更新,我仍然沒有切換到Swift 2.0 –