He probado el siguiente:

UIDevice.currentDevice().setValue(UIInterfaceOrientation.Portrait.rawValue, forKey: "orientation")

sobre

viewWillAppear

pero no funciona. ¿Cómo puedo girar la pantalla de mi en viewWillAppear?

ACTUALIZACIÓN

Puedo usar el siguiente código para el bloqueo de una orientación:

var shouldRotate = true
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int {
    if shouldRotate == true {
        return Int(UIInterfaceOrientationMask.Portrait.rawValue)
    } else {
        return Int(UIInterfaceOrientationMask.LandscapeLeft.rawValue)
    }
}

Swift 4.0

  private func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int {
        if shouldRotate == true {
            return Int(UIInterfaceOrientationMask.portrait.rawValue)
        } else {
            return Int(UIInterfaceOrientationMask.landscapeLeft.rawValue)
        }
    }

y en mi PRIMER controlador en viewWillAppear me puse:

if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {
    appDelegate.shouldRotate = true
}

en mi SEGUNDO controlador:

if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {
    appDelegate.shouldRotate = false
}

así que, cuando me de vuelta de la SEGUNDA controlador a la PRIMERA:

Puedo girar a la izquierda – no girar, girar de nuevo a la derecha – nada, girar a la izquierda, de nuevo – rota.

¿Cómo puedo solucionarlo?

4 Comentarios

  1. 18

    Para cambiar la orientación mediante programación en swift 3, utilice la siguiente manera:

    let value = UIInterfaceOrientation.landscapeRight.rawValue
    UIDevice.current.setValue(value, forKey: "orientation")

    Puede utilizar las orientaciones,

    1. retrato
    2. portraitUpsideDown
    3. landscapeLeft
    4. landscapeRight

    • No es esto peligroso? Lo que si Apple decide cambiar la «orientación» de un día?
    • de acuerdo a la documentación de apple, este es uno de los método para cambiar la orientación del dispositivo. para más detalles revisa developer.apple.com/documentation/uikit/uideviceorientation
    • me has salvado el hombre. no van a fuego ahora de mí!
  2. 1

    Puede reemplazar UIViewController.supportedInterfaceOrientations() en lugar de activar la rotación en viewWillAppear

    Para Xcode 7

    override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return UIInterfaceOrientationMask.Landscape
    }

    Para Xcode 6

    override func supportedInterfaceOrientations() -> Int {
        return Int(UIInterfaceOrientationMask.Landscape.rawValue)
    }

    Y asegúrese de que la deseada orientaciones se han habilitado en la configuración del proyecto.

    Cómo girar la orientación de la programación en Swift?

    • me da el siguiente error: «método de reemplazo con selector ‘supportedInterfaceOrientations’ ha incompatible tipo de ‘() -> UIInterfaceOrientationMask»
    • Fue Xcode 7 de la sintaxis, lo siento
    • UIInterfaceOrientationMask no es convertible Int error
    • trate de return Int(UIInterfaceOrientationMask.Landscape.rawValue)
    • funciona, pero se bloquea con terminating app due to uncaught exception 'UIApplicationInvalidInterfaceOrientation', reason: 'Supported orientations has no common orientation with the application, and [myapp.SecondViewController shouldAutorotate] is returning YES'
    • trate de return UIInterfaceOrientation.LandscapeLeft.rawValue
    • Y asegúrese de habilitar paisaje en el nivel de Aplicación
    • He utilizado Retrato, no LandscapeLeft y sí, estoy seguro de que estas orientaciones se permiten
    • Creo que Compatible orientaciones no tiene la orientación común con la aplicación significa que la orientación se establece en el ViewController no está disponible en la App de Nivel.
    • Estas orientaciones apoyo en mi app de nivel, estar seguro. He comprobado casilla de estas orientaciones

  3. 1

    Swift 4:

    Cómo girar la orientación de la programación en Swift?

    Paso1:

    En el Appdelegate – Declarar deviceOrientation var que es portrait por defecto

    import UIKit
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
        var window: UIWindow?
        var deviceOrientation = UIInterfaceOrientationMask.portrait
        func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
            return deviceOrientation
        }
    }

    Paso 2:

    En su ViewController escribir esto para cambiar la orientación de

     override func viewWillAppear(_ animated: Bool) {
         appDelegate.deviceOrientation = .landscapeLeft
         let value = UIInterfaceOrientation.landscapeLeft.rawValue
         UIDevice.current.setValue(value, forKey: "orientation")
     } 
  4. 1

    Edición:

    Puede modificar esto para implementar cualquier combinación de orientaciones.

    En El AppDelegate:

    internal var viewControllerOrientation = 0
    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        if viewControllerOrientation == 0 {
            return .portrait
        } else if viewControllerOrientation == 1 {
          return .landscapeLeft
        } else if viewControllerOrientation == 2 {
          return .landscapeRight
        }
    }

    LandscapeLeftViewController

    Vista controlador está bloqueado en landscapeLeft orientación

    override func viewDidAppear(_ animated: Bool) {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.viewControllerOrientation = 1
    }
    
    @IBAction func newVCBtnWasPressed(_ sender: Any) {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.viewControllerOrientation = 0
    
        //go to different view controller method, such as:
        dismiss(animated: true, completion: nil)
    }

    LandscapeRightViewController

    Vista controlador está bloqueado en landscapeRight orientación

    override func viewDidAppear(_ animated: Bool) {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.viewControllerOrientation = 2
    }
    
    @IBAction func newVCBtnWasPressed(_ sender: Any) {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.viewControllerOrientation = 0
    
        //go to different view controller method, such as:
        dismiss(animated: true, completion: nil)
    }

    Todos los demás de la vista de los controladores están encerrados en la orientación vertical. De nuevo, puede modificar esto para implementar cualquier combinación de bloqueado orientaciones desea.

Dejar respuesta

Please enter your comment!
Please enter your name here