Core Motion 在 Xcode 7 Swift 2.0 中不工作
Core Motion not working in Xcode 7 Swift 2.0
无论我使用 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
方法中请求加速度计数据,那么我会得到数据。但是如果我启动加速度计并以相同的方法请求数据,那么我什么也得不到(当我在转换到其他场景之前启动加速度计然后在下一个场景中请求数据时我也什么也得不到)。
我不知道这是正常现象还是 bug,但至少我找到了一个暂时的解决方案:在获取数据之前给 core-motion 尽可能多的时间。
无论我使用 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
方法中请求加速度计数据,那么我会得到数据。但是如果我启动加速度计并以相同的方法请求数据,那么我什么也得不到(当我在转换到其他场景之前启动加速度计然后在下一个场景中请求数据时我也什么也得不到)。
我不知道这是正常现象还是 bug,但至少我找到了一个暂时的解决方案:在获取数据之前给 core-motion 尽可能多的时间。