У меня есть следующий код в моем viewDidLoad, который предназначен для поворота «статуи» узла SCNScene в зависимости от ориентации устройства.
Когда я запускаю приложение на устройстве, начальные углы Эйлера статуи кажутся заданными ориентацией устройства, но перемещение устройства вообще не обновляет углы Эйлера узла, и узел полностью неподвижен.
Любая идея, почему startDeviceMotionUpdates не вызывает функцию updateStatueOrientation непрерывно?
// create a new scene
let scene = SCNScene(named: "art.scnassets/bathroom.scn")!
//attach statue node to code
let statue = scene.rootNode.childNode(withName: "statue", recursively: true)!
let motionManager = CMMotionManager()
motionManager.showsDeviceMovementDisplay = true
motionManager.deviceMotionUpdateInterval = 1.0 / 60.0
if motionManager.isDeviceMotionAvailable {
print("Motion active")
motionManager.startDeviceMotionUpdates(to: OperationQueue(), withHandler: { (motion: CMDeviceMotion?, err: Error?) in
updateStatueOrientation(m:motion!)
})
}
func updateStatueOrientation(m:CMDeviceMotion) {
statue.eulerAngles.z = Float(m.attitude.yaw - Double.pi)
statue.eulerAngles.y = Float(m.attitude.pitch)
statue.eulerAngles.z = Float(m.attitude.roll)
print("\(m.attitude.yaw) \(m.attitude.pitch) \(m.attitude.roll)")
}
motionManager
как свойство в файлеview controller
. Я предполагаю, что вы создали его вviewdidLoad()
и выпустили после одной итерации. Пожалуйста, проверьте и дайте комментарии. - person biloshkurskyi.ss   schedule 23.12.2017