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 }
将是未定义的。建议提交错误报告。
在 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 }
将是未定义的。建议提交错误报告。