es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo prevenir que ARSCNView rote.

Tengo una clase como esta:

class ViewController: UIViewController, ARSCNViewDelegate, SCNPhysicsContactDelegate  {

    @IBOutlet var sceneView: ARSCNView!

¿Cómo puedo evitar que la vista de escena (sceneView) rote?

He intentado muchas formas, como añadir

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
       return UIInterfaceOrientationMask.portrait
   }

   override var shouldAutorotate: Bool {
       return false
   }

en UIViewController

O añadir

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
{

    return UIInterfaceOrientationMask.portrait
}

en App delegate

O configurar
enter image description here

O configurar
enter image description here

Ninguno de estos métodos funciona. Cuando lo ejecuto en mi iPad, siempre rota cuando cambio la orientación de mi iPad.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para evitar que el sceneView rote, puedes seguir los siguientes pasos:

    1. Subclase la clase ARSCNView y sobrescribe las propiedades shouldAutorotate y supportedInterfaceOrientations para que devuelvan los valores deseados. Por ejemplo:
    class CustomARView: ARSCNView {
        override var shouldAutorotate: Bool {
            return false
        }
    
        override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
            return .portrait
        }
    }
    
    1. Reemplaza la propiedad sceneView en la clase ViewController con una instancia de tu clase CustomARView.
    class ViewController: UIViewController, ARSCNViewDelegate, SCNPhysicsContactDelegate  {
        @IBOutlet var sceneView: CustomARView!
        //...
    }
    
    1. Asegúrate de que el UIViewController que contiene tu controlador de vista AR también devuelve los valores deseados para shouldAutorotate y supportedInterfaceOrientations.
    class ARViewControllerContainer: UIViewController {
        override var shouldAutorotate: Bool {
            return false
        }
    
        override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
            return .portrait
        }
        //...
    }
    

    Siguiendo estos pasos, deberías ser capaz de evitar que el sceneView rote.

Comments are closed.