Theilya Theilya - 5 months ago 22
Swift Question

motion manager not working

I'am trying to get the device motion (pitch,roll,yaw) but my function handleDeviceMotionUpdate isn't launched (I'am trying it on an iphone 5s) , here is the code :

import UIKit
import CoreMotion

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()






var motionManager = CMMotionManager()
motionManager.startDeviceMotionUpdates()
motionManager.deviceMotionUpdateInterval = 0.1


motionManager.startDeviceMotionUpdatesToQueue(
NSOperationQueue.currentQueue()!, withHandler: {
(deviceMotion, error) -> Void in

if(error == nil) {
self.DeviceMotionUpdate(deviceMotion!)
} else {
print("error")
}
})

}


override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()

}

func DeviceMotionUpdate(deviceMotion:CMDeviceMotion) {
print("function launched")
var attitude = deviceMotion.attitude
var roll = (attitude.roll)
var pitch = (attitude.pitch)
var yaw = (attitude.yaw)
print("Roll: \(roll), Pitch: \(pitch), Yaw: (yaw)")

}



}


I don't get the error in startDeviceMotionUpdatesToQueue . I get true on motionManager.deviceMotionActive and on motionManager.deviceMotionAvailable

Answer

Your motionManager probably gets destroyed after it finished running the viewDidLoad method. Try making motionManager a class property.

class ViewController: UIViewController {
    var motionManager = CMMotionManager()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.motionManager.startDeviceMotionUpdates()

        ...