2015-02-10 70 views
0
import UIKit 
import CoreMotion 

class ViewController: UIViewController { 

    @IBOutlet weak var label: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let manager = CMMotionManager() 
     if manager.accelerometerAvailable { 
      println("accelerometerAvailable = true") 
      manager.accelerometerUpdateInterval = 0.01 
      manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()) { 
       [weak self] (data: CMAccelerometerData!, error: NSError!) in 

       println("inside") 
       println(data) 
       println("x: \(data.acceleration.x)") 
       println("y: \(data.acceleration.y)") 
       println("z: \(data.acceleration.z)") 
       self?.label.text = "Kashif" 
       self?.label.text = String(format: "%.2f", data.acceleration.x) 
      } 
     } 
    } 
} 

我已經鏈接了CoreMotion框架。我的控制檯輸出只有CoreMotion Basic

accelerometerAvailable =真

我不會得到更新標籤或任何其他控制檯輸出。我錯過了什麼?

+1

直接從蘋果公司的文件:*由於處理的事件可能到達率很高,不建議使用的主要操作隊列* – 2015-02-10 21:11:14

+0

改變讓隊列= NSOperationQueue(),但仍相同 – Kashif 2015-02-10 21:20:03

+0

你開始你的新隊列? – nielsbot 2015-02-10 22:14:00

回答

2

您的CMMotionManager實例的作用域爲viewDidLoad方法,因此在方法結束後將其取消分配。因此沒有什麼可以將更新發送到您的隊列。您希望將CMMotionManager作爲視圖控制器屬性創建,或者將您的應用程序委託創建爲跨多個VC(因爲您只應創建一個應用程序範圍)。

class ViewController: UIViewController { 

    // move the manager out here 
    let manager = CMMotionManager() 

    // everything else should work fine 
    @IBOutlet weak var label: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     if manager.accelerometerAvailable { 
      println("accelerometerAvailable = true") 
      manager.accelerometerUpdateInterval = 0.01 
      manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()) { 
       [weak self] (data: CMAccelerometerData!, error: NSError!) in 

       println("inside") 
       println(data) 
       println("x: \(data.acceleration.x)") 
       println("y: \(data.acceleration.y)") 
       println("z: \(data.acceleration.z)") 
       self?.label.text = "Kashif" 
       self?.label.text = String(format: "%.2f", data.acceleration.x) 
      } 
     } 
    } 
} 
+0

謝謝你是這個問題 – Kashif 2015-02-11 12:57:18