CoreMotion中的加速计在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

我的应用程序使用CoreMotion允许播放器在设备倾斜时移动。它在Swift 2中工作得非常好,但当我将其更新为Swift 3时,它已停止工作。我没有收到任何加速度计更新

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)
        }

    }
}