2016-02-22 5 views
0

Я был довольно сомнительным в формулировке названия этого вопроса, но я думаю, что это все так, как есть.Как использовать CoreMotion в WatchKit?

Я пытался просто прочитать данные CoreMotion на WatchKit, но, как выясняется, я не могу заставить 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 

(Да, два раза я не знаю, почему это тоже, но это не точка, должна быть еще одна вещь Я делаю неправильно)

Я отправляю это здесь, потому что у меня нет подсказки, где искать, это безумие.

ответ

0

Motion Device (startDeviceMotionUpdatesToQueue) не доступен в WatchOS2 еще (deviceMotionAvailable возвращает ложь), вероятно, акселерометр может помочь вам startAccelerometerUpdatesToQueue

+0

Спасибо за головы! Итак, в WatchOS2 нет возможности читать гироскопические данные? –

+0

Gyro также пока недоступен, просто акселерометр –

+0

Даже с self.motionManager startAccelerometerUpdatesToQueue не работает. Однако isAccelerometerAvailable возвращает YES. –