yes style pwa name icon home content color capable bar apps apple app ios objective-c xcode landscape viewcontroller

ios - style - Solo un modo de paisaje VER



pwa safari icon (5)

Debe declarar que debe rotar como interno para deshacerse de la propiedad pública en ninguna advertencia de clase pública. internal var shouldRotate = false

Terminé mi aplicación para iOS, pero necesito establecer solo UNA vista en modo paisaje, el resto de las vistas solo se pueden ver en modo vertical.

Estoy usando Xcode 5.1 y he creado todas mis vistas al colocar en mi guión View Controller desde el panel derecho, así que si me dices que escriba algún código en alguna parte, dime exactamente dónde debo escribirlo.

Leí una solución aquí UINavigationController Force Rotate pero no sé dónde escribir ese código. ¿Debo crear un UIViewController manualmente?


Para realizar un seguimiento de la solución de Yaroslav, para permitir la rotación al modo horizontal en una sola vista, el controlador de vista horizontal debe tener establecido Rotate en SÍ en su método viewWillAppear, y en NO en su vista, desaparecerá.

Si solo configuraShouldRotate en YES en la vista que aparecerá, después de haber creado este controlador de vista, todos los demás controles de vista se rotarán también. Por lo tanto, debe establecer que ShouldRotate en NO en su vista desaparecerá para restringir la rotación de la vista vertical.


Supongo que apuntas a iOS 7 aquí (usando XCode 5.1, creo que tengo razón).

En primer lugar, debe comprender que para abrir solo una vista de más de 40 en el paisaje, su aplicación debe permitir las orientaciones de la interfaz horizontal y vertical. Es el caso de manera predeterminada, pero puede verificarlo en la configuración de su destino, pestaña General , sección Deployment Info (consulte la captura de pantalla a continuación).

Entonces, como permitiste tanto el paisaje como el retrato para toda la aplicación, deberás decirle a cada UIViewController que no se debe autorrotar, añadiendo la implementación de este método:

- (BOOL)shouldAutorotate { return NO; }

Finalmente, para su controlador específico solo de paisaje y porque dijo que lo está presentando de manera modal, puede implementar estos métodos:

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationLandscapeLeft; // or Right of course } - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; }

Espero que esto ayude,


Rápido

AppDelegate.swift

internal var shouldRotate = false func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { return shouldRotate ? .allButUpsideDown : .portrait }

Su controlador de vista de paisaje

let appDelegate = UIApplication.shared.delegate as! AppDelegate appDelegate.shouldRotate = true // or false to disable rotation

C objetivo

AppDelegate.h

@property (assign, nonatomic) BOOL shouldRotate;

AppDelegate.m

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return self.shouldRotate ? UIInterfaceOrientationMaskAllButUpsideDown : UIInterfaceOrientationMaskPortrait; }

Su controlador de vista de paisaje

AppDelegate *appDelegate = [UIApplication sharedApplication].delegate; [appDelegate setShouldRotate:YES]; // or NO to disable rotation


SWIFT4

Agregue líneas de código a continuación a su AppDelegate

var orientationLock = UIInterfaceOrientationMask.portrait func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { return self.orientationLock } struct AppUtility { static func lockOrientation(_ orientation: UIInterfaceOrientationMask) { if let delegate = UIApplication.shared.delegate as? AppDelegate { delegate.orientationLock = orientation } } static func lockOrientation(_ orientation: UIInterfaceOrientationMask, andRotateTo rotateOrientation:UIInterfaceOrientation) { self.lockOrientation(orientation) UIDevice.current.setValue(rotateOrientation.rawValue, forKey: "orientation") } }

Agregue el código siguiente al controlador que desea que sea apaisado

override func viewDidLoad() { super.viewDidLoad() } override func viewWillAppear(_ animated: Bool) { AppDelegate.AppUtility.lockOrientation(UIInterfaceOrientationMask.landscapeRight, andRotateTo: UIInterfaceOrientation.landscapeRight) } override func viewWillDisappear(_ animated : Bool) { super.viewWillDisappear(animated) AppDelegate.AppUtility.lockOrientation(UIInterfaceOrientationMask.portrait, andRotateTo: UIInterfaceOrientation.portrait) }