如果您希望旋转值将陀螺仪和加速度计输入考虑在内,听起来您想要运动管理器的设备运动。根据文档:
CMDeviceMotion 的一个实例封装了设备的姿态、旋转速率和加速度的测量值。
因此,与其直接监控陀螺仪数据,不如监控设备运动。下面的示例演示了如何逐帧获取设备运动。我刚刚决定CMAttitude
直接打印对象,但是从这个对象中,您可以直接访问设备的俯仰、滚动和偏航(以及更多),如果我没记错的话,这正是您正在寻找的.
import SpriteKit
import CoreMotion
class GameScene: SKScene {
let motionManager = CMMotionManager()
override func didMoveToView(view: SKView) {
motionManager.deviceMotionUpdateInterval = 1.0 / 30.0
motionManager.startDeviceMotionUpdates()
}
override func willMoveFromView(view: SKView!) {
motionManager.stopDeviceMotionUpdates()
}
override func update(currentTime: CFTimeInterval) {
if let attitude = motionManager.deviceMotion?.attitude? {
println(attitude)
let y = CGFloat(-attitude.pitch * 2 / M_PI)
let x = CGFloat(-attitude.roll * 2 / M_PI)
}
}
}
如果您使用的是 Swift 2,则需要进行一些小的更改,如下所示。
class GameScene: SKScene {
let motionManager = CMMotionManager()
override func didMoveToView(view: SKView) {
motionManager.deviceMotionUpdateInterval = 1.0 / 30.0
motionManager.startDeviceMotionUpdates()
}
override func willMoveFromView(view: SKView) {
motionManager.stopDeviceMotionUpdates()
}
override func update(currentTime: CFTimeInterval) {
if let attitude = motionManager.deviceMotion?.attitude {
print(attitude)
let y = CGFloat(-attitude.pitch * 2 / M_PI)
let x = CGFloat(-attitude.roll * 2 / M_PI)
}
}
}
有关这方面的更多信息,请参阅此图片。
