2016-11-10 16 views
0

我試圖顯示CMPedometer的節奏和步速數據。當我使用連接的手機運行應用程序時,它會立即通過print("...")函數將數據輸出寫入控制檯,但需要多次轉動,直到它顯示UILabel中的數據。 如何儘可能快地獲取數據,以便我可以使用它們?爲什麼「打印到控制檯」比「.text into label」要快得多

最佳,扎克

import UIKit 
import CoreMotion 

class ViewController: UIViewController { 
    let pedometer = CMPedometer() 
    @IBOutlet weak var paceLabel: UILabel! 
    @IBOutlet weak var cadenceLabel: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     guard CMPedometer.isCadenceAvailable() && CMPedometer.isPaceAvailable() else{ 
      print("Pace and cadence data are not available") 
      return 
     }   
     let oneWeekAgo = NSDate(timeIntervalSinceNow: -(7 * 24 * 60 * 60)) 
     pedometer.startUpdates(from: oneWeekAgo as Date) {data, error in 
      guard let pData = data , error == nil else{ 
       return 
      } 
      //The current pace of the user, measured in seconds per meter. (1 step = 83cm?) 
      if let pace = pData.currentPace{ 
       print("Pace = \(pace)") 
       self.paceLabel.text = "Pace = \(round(Double(pace))*10/10)" 
      } 
      //The rate at which steps are taken, measured in steps per second. 
      if let cadence = pData.currentCadence{ 
       self.cadenceLabel.text = "Cadence = \(cadence))" 
       print("Cadence = \(cadence)") 
      } 
     }// -----------------oneWeekAgo   
    }// -----------------ViewDidLoad 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 
}//-------------------- UIViewController 
+0

你是什麼意思「多轉?」 – NobodyNada

+0

它打印我的控制檯像多個數據輸出:吳佩慈= 0.2812560419071308 Cadence公司= 2.879265785217285 佩斯= 0.2812560419071308 Cadence公司= 2.879265785217285和後一分鐘左右就顯示標籤 –

回答

3

更新塊被稱爲後臺線程,你需要在主線程上更新UI。將UI更新調用包裹發送回主線程:

Dispatch.main.async { 
    //The current pace of the user, measured in seconds per meter. (1 step = 83cm?) 
    if let pace = pData.currentPace{ 
     print("Pace = \(pace)") 
     self.paceLabel.text = "Pace = \(round(Double(pace))*10/10)" 
    } 

    //The rate at which steps are taken, measured in steps per second. 
    if let cadence = pData.currentCadence{ 
     self.cadenceLabel.text = "Cadence = \(cadence))" 
      print("Cadence = \(cadence)") 
     } 
    } 
} 
+0

感謝丹。嗯,好像我需要在Grand Central Dispatch上做我的作業。 –

+0

找到這個有用的鏈接:https://www.raywenderlich.com/79149/grand-central-dispatch-tutorial-swift-part-1 –

相關問題