CoreMotion中的加速计在Swift 3中不工作
我的应用程序使用CoreMotion允许播放器在设备倾斜时移动。它在Swift 2中工作得非常好,但当我将其更新为Swift 3时,它已停止工作。我没有收到任何加速度计更新CoreMotion中的加速计在Swift 3中不工作,swift,swift3,Swift,Swift3,我的应用程序使用CoreMotion允许播放器在设备倾斜时移动。它在Swift 2中工作得非常好,但当我将其更新为Swift 3时,它已停止工作。我没有收到任何加速度计更新 override func didMove(to view: SKView) { manager.startAccelerometerUpdates() manager.accelerometerUpdateInterval = 0.1 manager.startAccelerometerUpdate
override func didMove(to view: SKView) {
manager.startAccelerometerUpdates()
manager.accelerometerUpdateInterval = 0.1
manager.startAccelerometerUpdates(to: OperationQueue.main){ (data, Error) in
if let accelerometerData = self.manager.accelerometerData {
self.physicsWorld.gravity = CGVector(dx: accelerometerData.acceleration.y * 10, dy: accelerometerData.acceleration.x * 10)
}
}
}
NSError
已在Swift 3中重命名为Error
,因此请将Error
变量设为camelCase(在您的情况下小写)。无论如何,这是一个变量,所以应该如此
下面是该函数的新版本,修复了该错误和其他小错误(请注意我关于交换X和Y的评论):
这是只重命名了变量的原始函数(注意:这里有一些编程错误,我不建议使用它):
编辑:您不应将主队列用作接收加速计更新的
操作队列。看。你说:“它已经停止工作了”。我只能猜测您的意思是它编译和运行良好,但从未调用过您的处理程序。是吗?我尝试过使用您的解决方案,但它仍然没有调用加速计,我确实在日志中收到一条消息:“如果我们在真正的预提交处理程序中,由于CA限制,我们实际上无法添加任何新的围栏”。我不确定这是否是问题所在。您确定没有调用处理程序吗?尝试将:打印(“获取加速计数据:\(accelerometerData)”)
放在之后,如果让accelerometerData…
行。另外,您使用的是哪一版本的代码?我确定没有调用处理程序,日志只显示[App]如果我们在真正的预提交处理程序中,由于CA限制,我们实际上无法添加任何新的防护措施
Im使用您上面建议的代码我肯定会调用处理程序,因为。请在发布前研究您的任何错误。无论如何,在didMove
函数的正下方添加一个print
语句,以确保处理程序已注册。另请看我的编辑。谢谢。我看到它没有被调用,并且我能够跟踪到视图控制器没有加载.swift文件的问题
override func didMove(to view: SKView) {
manager.accelerometerUpdateInterval = 0.1
manager.startAccelerometerUpdates(to: OperationQueue.main) { data, _ in
if let accelerometerData = data {
// IMPORTANT: Are you intentionally swapping x and y here? -----------> ↓
self.physicsWorld.gravity = CGVector(dx: accelerometerData.acceleration.y * 10,
dy: accelerometerData.acceleration.x * 10)
}
}
}
override func didMove(to view: SKView) {
manager.startAccelerometerUpdates()
manager.accelerometerUpdateInterval = 0.1
manager.startAccelerometerUpdates(to: OperationQueue.main) { (data, error) in
if let accelerometerData = self.manager.accelerometerData {
self.physicsWorld.gravity = CGVector(dx: accelerometerData.acceleration.y * 10, dy: accelerometerData.acceleration.x * 10)
}
}
}