如何在WatchKit中使用CoreMotion?

时间:2016-02-22 20:25:39

标签: ios watchkit core-motion

我对这个问题的标题措辞非常怀疑,但我认为这就是它的全部观点。

我一直在尝试只读取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

(是的,两次!我不知道为什么会这样,但那不是重点,必须是我做错的另一件事)

我在这里张贴这个'因为我不知道在哪里调查,这是疯狂的。

1 个答案:

答案 0 :(得分:0)

设备动态(deviceMotionAvailable)尚未在WatchOS2中可用(startAccelerometerUpdatesToQueue返回false),可能加速度计可以帮助您task copySharedLibs << { copy { from '\\\\network\\android\\armeabi\\liba.so' into 'src\\main\\jniLibs\\armeabi' } copy { from '\\\\network\\android\\\\mips\\liba.so' into 'src\\main\\jniLibs\\mips' } } task deleteSharedLibs(type: Delete) { delete 'src\\main\\jniLibs\\armeabi\\liba.so', 'src\\main\\jniLibs\\mips\\liba.so' } task buildRelease(dependsOn: ['copySharedLibs', 'uploadArchives', 'deleteSharedLibs']) { uploadArchives.mustRunAfter copySharedLibs deleteSharedLibs.mustRunAfter uploadArchives }