如何在 WatchKit 中使用 CoreMotion?
How to use CoreMotion in WatchKit?
我对这个问题的标题措辞非常怀疑,但我认为这就是重点。
我一直试图只读取 WatchKit 上的 CoreMotion 数据,但事实证明,我无法 startDeviceMotionUpdatesToQueue
工作,我的处理程序从未被调用。
我在自定义后台线程 (NSOperationQueue()
) 中尝试了 运行,仍然没有成功。
我正在真正的 Apple Watch 上调试,而不是模拟器。
在我的 WKInterfaceController
:
let manager = CMMotionManager()
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
let communicator = SessionDelegate()
manager.deviceMotionUpdateInterval = 1 / 60
manager.startDeviceMotionUpdatesToQueue(NSOperationQueue.mainQueue()) {
(motionerOp: CMDeviceMotion?, errorOp: NSError?) -> Void in
print("got into handler")
guard let motion = motionerOp else {
if let error = errorOp {
print(error.localizedDescription)
}
assertionFailure()
return
}
print("passed guard")
let roll = motion.attitude.roll
let pitch = motion.attitude.pitch
let yaw = motion.attitude.yaw
let attitudeToSend = ["roll": roll, "pitch": pitch, "yaw": yaw]
communicator.send(attitudeToSend)
}
print("normal stack")
}
输出是
normal stack
normal stack
(是的,两次!我也不知道为什么,但这不是重点,一定是我做错的另一件事)
我在这里发布这个是因为我不知道在哪里查看,这太疯狂了。
设备运动 (startDeviceMotionUpdatesToQueue
) 在 WatchOS2 中尚不可用 (deviceMotionAvailable
returns false),加速度计可能可以帮助您 startAccelerometerUpdatesToQueue
我对这个问题的标题措辞非常怀疑,但我认为这就是重点。
我一直试图只读取 WatchKit 上的 CoreMotion 数据,但事实证明,我无法 startDeviceMotionUpdatesToQueue
工作,我的处理程序从未被调用。
我在自定义后台线程 (NSOperationQueue()
) 中尝试了 运行,仍然没有成功。
我正在真正的 Apple Watch 上调试,而不是模拟器。
在我的 WKInterfaceController
:
let manager = CMMotionManager()
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
let communicator = SessionDelegate()
manager.deviceMotionUpdateInterval = 1 / 60
manager.startDeviceMotionUpdatesToQueue(NSOperationQueue.mainQueue()) {
(motionerOp: CMDeviceMotion?, errorOp: NSError?) -> Void in
print("got into handler")
guard let motion = motionerOp else {
if let error = errorOp {
print(error.localizedDescription)
}
assertionFailure()
return
}
print("passed guard")
let roll = motion.attitude.roll
let pitch = motion.attitude.pitch
let yaw = motion.attitude.yaw
let attitudeToSend = ["roll": roll, "pitch": pitch, "yaw": yaw]
communicator.send(attitudeToSend)
}
print("normal stack")
}
输出是
normal stack
normal stack
(是的,两次!我也不知道为什么,但这不是重点,一定是我做错的另一件事)
我在这里发布这个是因为我不知道在哪里查看,这太疯狂了。
设备运动 (startDeviceMotionUpdatesToQueue
) 在 WatchOS2 中尚不可用 (deviceMotionAvailable
returns false),加速度计可能可以帮助您 startAccelerometerUpdatesToQueue