无论我使用pull或push方法,我都没有得到Core Motion的输出。我在iPhone 4s iOS 8.4上使用Xcode 7.0 beta 6和Swift 2.0。
let manager = CMMotionManager()
manager.accelerometerUpdateInterval = 0.3
manager.startAccelerometerUpdates()
print(manager.accelerometerData?.acceleration.x)
manager.accelerometerUpdateInterval = 0.3
manager.startAccelerometerUpdatesToQueue(NSOperationQueue()) { (data: CMAccelerometerData?, error: NSError?) in
guard data != nil else {
print("There was an error: \(error)")
return
}
print(data!.acceleration.x)
}
谁知道我做错了什么?谢谢。
有趣的事情......我来到这里寻找这个问题的答案。 ;)
据我所知(我不是Swift或XCode的专家)问题是核心动作的指令之间没有足够的时间来获取数据:如果你调用manager.startAccelerometerUpdates()
然后,过了一会儿,请求accelerometerData,那你就没问题了。如果在我的SpriteKit游戏中,我在GameViewController的viewDidLoad
方法中启动加速度计更新,并且我在场景的didMoveToView
方法中询问加速度计数据,然后我得到数据。但是,如果我启动加速度计并以相同的方法询问数据,那么我什么也得不到(当我在转换到其他场景之前启动加速度计然后在下一个场景中询问数据时,我什么也得不到)。
我不知道这是正常还是错误,但至少我发现了一个时间解决方案:在获取数据之前尽可能多地给核心动作。