Cameranode gira mientras el dispositivo iOS se mueve

Es un proyecto de reproductor de video de 360 grados.

Agrego un cameranode (SCNNode) a un rootnode, el cameranode se colocó en el centro (0,0,0) delSCNSphere, Puede reproducir video por ahora.

Ahora tengo que usar devicemotion. Necesito rotar la cámara cuando el dispositivo se mueve. No solo gira un cierto ángulo. (No solo el movimiento del dispositivo, cuando sostengo un dispositivo, mi movimiento se considera como el dispositivo en movimiento. Porque descubrí que si usodeviceMotion.attitude.roll, el cameranode solo se mueve cuando el dispositivo se mueve solo, no cuando doy vueltas con el dispositivo)

Cuando el dispositivo se encuentra en la posición (x1, y1, z1), el cameranode rotará a medida que el dispositivo se mueve, y cuando el dispositivo se encuentre en la posición (x1, y1, z1) nuevamente, la vista debe ser la misma que la última que dejamos .

Esto es lo que he hecho:

if (self.motionManager.gyroAvailable) {
        self.motionManager.gyroUpdateInterval = 1.0/60.0;
        [self.motionManager startGyroUpdatesToQueue:self.queue withHandler:^(CMGyroData *gyroData, NSError *error){
            if (error) {
                [self.motionManager stopGyroUpdates];
                NSLog(@"Gyroscope encountered error:%@",error);
            }else {
                CGFloat tempX = 0;
                CGFloat tempY = 0;
                CGFloat tempZ = 0;
                if ((fabs(gyroData.rotationRate.y)/60) > 0.002) {
                    tempY = gyroData.rotationRate.y/60;
                }
                tempX = gyroData.rotationRate.x/60;
                tempZ = gyroData.rotationRate.z/60;
                [self.cameraNode runAction:[SCNAction rotateByX:-tempY y:tempX z:tempZ duration:0]];
            }
        }];
    }else {
        NSLog(@"This device has no gyroscope");
    }

Las matemáticas podrían estar equivocadas, no sé por qué dividiría 60, pero parece el valor más cercano que necesito cuando uso[self.cameraNode runAction:[SCNAction rotateByX:-tempY y:tempX z:tempZ duration:0]];

Aquí está el problema?

¿Qué datos debo usar?

CMGyroData oCMDeviceMotion. Si usoCMDeviceMotion, ¿qué valor específico debo usar?deviceMotion.attitude, deviceMotion.attitude.quaternion, deviceMotion.gravity

¿Cuál es el método correcto para rotar un cameranode? Hay muchos métodos, no estoy seguro.

+ (SCNAction *)rotateByX:(CGFloat)xAngle y:(CGFloat)yAngle z:(CGFloat)zAngle duration:(NSTimeInterval)duration;

+ (SCNAction *)rotateToX:(CGFloat)xAngle y:(CGFloat)yAngle z:(CGFloat)zAngle duration:(NSTimeInterval)duration;

Respuestas a la pregunta(1)

Su respuesta a la pregunta