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)
}