watchOS2 CMDeviceMotion 不起作用

watchOS2 CMDeviceMotion does not work

Interfacecontroller.swift 中我有一个 class 变量 var motionManager = CMMotionManager()var accTest = [Double]() 我在这段代码中引用了它们:

let useOnlyAccelerometer = true

    if useOnlyAccelerometer {

        motionManager.accelerometerUpdateInterval = 0.1
        if motionManager.accelerometerAvailable {
            let handler:CMAccelerometerHandler = {(data: CMAccelerometerData?, error: NSError?) -> Void in
                self.statusLabel.setText(String(format: "%.2f", data!.acceleration.x))
                self.accTest.append(data!.acceleration.x)
            }
            motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue.currentQueue()!, withHandler: handler)
        }
    } else {

        motionManager.deviceMotionUpdateInterval = 0.1
        if motionManager.deviceMotionAvailable {
            let handler:CMDeviceMotionHandler = {(motion: CMDeviceMotion?, error: NSError?) -> Void in
                self.statusLabel.setText(String(format: "%.2f", motion!.userAcceleration.x))
                self.accTest.append(motion!.userAcceleration.x)
            }
            motionManager.startDeviceMotionUpdatesToQueue(NSOperationQueue.currentQueue()!, withHandler: handler)

        }
    }

直接使用加速度计就可以了。现在,如果我将 useOnlyAccelerometer 更改为 false 则它不起作用。我不明白其中的区别或出了什么问题。在 iPhone 上它确实有效,并且根据文档 watchOS2 应该支持 CMDeviceMotion。有什么想法吗?

我的猜测是第一代 Apple Watch 不支持磁力计。 Ifixit 透露手表上有一块磁铁可以将其连接到充电器。在 WWDC 2016 的实验室中,我问一位 Apple 工程师是否会支持磁力计,得到了相当含糊的答复:"that would require a powerful magnetometer, wouldn't it?" 我不知道未来是否会支持。

因此,如果不支持磁力计,则 CMDeviceMotion 的 return 值

public var magneticField: CMCalibratedMagneticField { get }

将是未定义的。建议提交错误报告。