使用swift 3在IOS 10 coremotion中选择态度参考框架

时间:2016-10-14 15:30:17

标签: swift3 ios10 core-motion

我正在尝试使用CMMotionManager来更新scenekit中摄像机视点的态度。我可以使用默认引用来获取以下代码。

manager.deviceMotionUpdateInterval = 0.01
manager.startDeviceMotionUpdates(to: motionQueue, withHandler:{ deviceManager, error in
                if (deviceManager?.attitude) != nil {
                    let rotation = deviceManager?.attitude.quaternion

                    OperationQueue.main.addOperation {
                        self.cameraNode.rotation = SCNVector4(rotation!.x,rotation!.y,rotation!.z,rotation!.w)
                    }
                }

        })

但是我无法让startDeviceMotionUpdates使用选定的参考框架,如下所示:

manager.deviceMotionUpdateInterval = 0.01
manager.startDeviceMotionUpdates(using: CMAttitudeReferenceFrameXMagneticNorthZVertical, to: motionQueue, withHandler:{ deviceManager, error in
            if (deviceManager?.attitude) != nil {
                let rotation = deviceManager?.attitude.quaternion

                OperationQueue.main.addOperation {
                    self.cameraNode.rotation = SCNVector4(rotation!.x,rotation!.y,rotation!.z,rotation!.w)
                }
            }

        })

我收到的错误是:

Use of unresolved identifier 'CMAttitudeReferenceFrameXMagneticNorthZVertical'

我也得到了其他参考帧的类似错误消息。任何人都可以对startDeviceMotionUpdates函数的“using:”参数的使用有所了解吗?我发现的所有示例都是针对swift或objective c的旧版本,所以很可能它只是一个不理解Swift 3语法的问题。

1 个答案:

答案 0 :(得分:0)

经过一些额外的讨论后,我发现using参数需要一个新的CMAttitudeReferenceFrame结构的成员。即它应该通过:

manager.deviceMotionUpdateInterval = 0.01
manager.startDeviceMotionUpdates(using: CMAttitudeReferenceFrame.xMagneticNorthZVertical
            ,to: motionQueue, withHandler:{
            deviceManager, error in
            if (deviceManager?.attitude) != nil {
                let rotation = deviceManager?.attitude.quaternion

                OperationQueue.main.addOperation {
                    self.cameraNode.rotation = SCNVector4(rotation!.x,rotation!.y,rotation!.z,rotation!.w)
                }
            }

        })

这是对早期版本的更改,允许直接使用常量,例如" CMAttitudeReferenceFrameXMagneticNorthZVertical"