2015-03-25 3 views
0

Я пытаюсь показать данные акселерометра в пользовательском интерфейсе с помощью Swift. Я приводил некоторые примеры на http://nshipster.com/cmdevicemotion/ и попытался использовать их метод поворота изображения, а также просто отображать данные x ускорения как метку, но ни мое изображение, ни моя метка не преобразуются и не обновляются с любыми данными. Я строю и запускаю свой iPhone 6 (не симулятор).Не получать Core Motion для отображения данных акселерометра в UI

import UIKit 
import CoreMotion 

class ViewController: UIViewController { 

@IBOutlet weak var label: UILabel! 

@IBOutlet weak var image: UIImageView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let manager = CMMotionManager() 

    if manager.accelerometerAvailable { 

     manager.accelerometerUpdateInterval = 0.01 

     manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()) { 
      [weak self] (data: CMAccelerometerData!, error: NSError!) in 

      let rotation = atan2(data.acceleration.x, data.acceleration.y) - M_PI 

      self?.image.transform = CGAffineTransformMakeRotation(CGFloat(rotation)) 

      self?.label.text = String(format: "%.2f", data.acceleration.x) 
     } 


    } 



} 

ответ

1

Вы создаете локальную CMMotionManager к viewDidLoad(), но вам нужен глобальный CMMotionManager для того, чтобы быть доступны в вашей очереди. Попробуйте создать экземпляр manager выше viewDidLoad(), например:

import UIKit 

import CoreMotion 

class ViewController: UIViewController { 

@IBOutlet weak var label: UILabel! 

@IBOutlet weak var image: UIImageView! 

let manager = CMMotionManager() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let manager = CMMotionManager() 

    if manager.accelerometerAvailable { 

     manager.accelerometerUpdateInterval = 0.01 

     manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()) { 
      [weak self] (data: CMAccelerometerData!, error: NSError!) in 

      let rotation = atan2(data.acceleration.x, data.acceleration.y) - M_PI 

      self?.image.transform = CGAffineTransformMakeRotation(CGFloat(rotation)) 

      self?.label.text = String(format: "%.2f", data.acceleration.x) 
     } 
    } 
} 
Смежные вопросы