无法从Accelerometer,Gyro和DeviceMotion获得价值

时间:2017-01-15 08:39:31

标签: iphone swift swift3 xcode8 cmmotionmanager

我正在制作一款应用程序,通过iPhone的任何移动来跟踪您的睡眠。我到处搜索,有很多方法可以从中获取数据,但没有工作。这是我的代码。

func startManager() {
    let manager = CMMotionManager()
    manager.startAccelerometerUpdates()
    let accelerometer = manager.accelerometerData
}

但是manager.accelerometerData是零。我也尝试使用DeviceMotion,Gyro和UserAcceleration,但没有使用它们。我也试过这个。

print(manager.isAccelerometerActive)

它打印 false 所以我认为这是问题,但我仍然无法激活它。

我尝试将 let manager = CMMotionManager()放到顶部,但仍然无效。

我尝试将 manager.startAccelerometerUpdates()放在ViewDidLoad中,但仍无效。

我还尝试了另一种方式。

    manager.startAccelerometerUpdates(to: OperationQueue.main) { (data : CMAccelerometerData, error : Error) in
        print(data)
    }

但它给了我一个错误,说我必须添加! CMAccelerometerHandler 但在我添加之后它告诉我再次添加它。

我想从Accelerometer获取原始值x,y和z

(我导入了CoreMotion)

我在XCode 8.2.1上使用Swift 3并在iPhone 6s上测试它。

1 个答案:

答案 0 :(得分:0)

Swift3中,您应该在处理程序中使用可选参数

motionManager.startAccelerometerUpdates(
    to: OperationQueue.main , 
    withHandler:{ (data : CMAccelerometerData?, error : Error?) in
       print(data)
})