Nota: esta pregunta es de 2008 y ahora solo tiene un interés histórico.
¿Cuál es la mejor manera de crear una aplicación de iPhone que se ejecute en modo horizontal desde el principio, independientemente de la posición del dispositivo?
Tanto de forma programática como con el Interface Builder.
Tenga en cuenta que esta respuesta ahora está muy desactualizada.
Esta publicación es solo una curiosidad histórica .
¡Noticias emocionantes! Como descubrió Andrew a continuación, este problema ha sido resuelto por Apple en 4.0+.
Parece que ya NO es necesario forzar el tamaño de la vista en cada vista, y se ha resuelto el problema serio específico del paisaje “que solo funciona la primera vez”.
A partir de abril de 2011, no es posible probar o incluso construir nada por debajo de 4.0, por lo que la pregunta es puramente una curiosidad histórica. ¡Es increíble cuántos problemas causó a los desarrolladores durante tanto tiempo!
Aquí está la discusión original y la solución. Esto es totalmente irrelevante ahora, ya que estos sistemas ni siquiera son operables.
Es EXTREMADAMENTE DIFÍCIL hacer que esto funcione por completo; hay al menos tres problemas / errores en juego.
prueba esto … diseño del paisaje del constructor de interfaz
Tenga en cuenta en particular que cuando dice “y necesita utilizar shouldAutorotateToInterfaceOrientation correctamente en todas partes” significa en todas partes, todas sus vistas a pantalla completa.
Espero que ayude en esta pesadilla!
Un recordatorio importante del problema ADICIONAL conocido aquí: si intenta cambiar entre MÁS DE UNA vista (todo el paisaje), SIMPLEMENTE NO FUNCIONA . Es esencial recordar esto o perderá días en el problema. Literalmente NO ES POSIBLE. Es el error abierto, conocido y más grande en la plataforma de iOS. Literalmente, no hay forma de que el hardware haga que la segunda vista que cargue sea horizontal. La solución molesta pero simple, y lo que debe hacer, es tener un UIViewController maestro trivial que no haga nada más que sentarse allí y le permita intercambiar sus puntos de vista.
En otras palabras, en iOS debido a un gran error conocido:
[window addSubview:happyThing.view]; [window makeKeyAndVisible];
Puedes hacer eso solo una vez . Más tarde, si intenta eliminar happyThing.view, y en su lugar pone newThing.view, NO FUNCIONA, Y ES DE ESO. La máquina nunca girará la vista hacia el paisaje. No hay ningún truco, incluso Apple no puede hacer que funcione. La solución que debe adoptar es tener un UIViewController general que simplemente se encuentre allí y solo contenga sus diversas vistas (happyThing, newThing, etc.). ¡Espero eso ayude!
Desde el sitio de Apple Dev:
Para iniciar su aplicación en modo horizontal para que la barra de estado esté en la posición adecuada inmediatamente, edite su archivo Info.plist para agregar la clave UIInterfaceOrientation con el valor apropiado (UIInterfaceOrientationLandscapeRight o UIInterfaceOrientationLandscapeLeft), como se muestra en el Listado 2.
Listado 2: iniciar su aplicación en modo horizontal
UIInterfaceOrientation UIInterfaceOrientationLandscapeRight
Resumen e integración de todas las publicaciones, después de probarlo yo mismo; verifique la actualización de 4.x, 5.x a continuación.
A partir de 3.2, no puede cambiar la orientación de una aplicación en ejecución desde el código.
Pero puede iniciar una aplicación con una orientación fija, aunque hacerlo no es sencillo.
Prueba con esta receta:
UISupportedInterfaceOrientations
en el archivo Info.plist
shouldAutorotateToInterfaceOrientation:
para devolver el mismo valor que definió en el plist, por supuesto) en todos los controladores de vista establecen una vista de fondo con
self.view.frame = CGRectMake(0, 0, 480, 320)
en el método viewDidLoad
.
Actualización (iOS 4.x, 5.x) : la Guía de progtwigción de la aplicación Apple iOS tiene un párrafo “Iniciando en modo paisaje” en el capítulo “Trucos de la aplicación avanzada”.
Referencias
Primero configuré en info.plist
UIInterfaceOrientation UIInterfaceOrientationLandscapeRight
luego puse este código en applicationDidFinishLaunching:
CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57079633); [window setTransform:rotate]; CGRect contentRect = CGRectMake(0, 0, 480, 320); window.bounds = contentRect; [window setCenter:CGPointMake(160.0f, 240.0f)];
De esta forma puedo trabajar en la vista en Interface Builder en modo horizontal.
La respuesta de sasb y michaelpryor parece ser correcta, pero si no está funcionando para ti, prueba esta alternativa:
- (void)applicationDidFinishLaunchingUIApplication *)application { application.statusBarOrientation = UIInterfaceOrientationLandscapeRight; }
O este:
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
O este:
[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];
También puede tener que llamar a la window makeKeyAndVisible;
primero.
Algunos enlaces: Desarrollando en modo apaisado , iPhone SDK: ¿Cómo forzar el modo Paisaje solamente?
@Robert: consulte el iPhone SDK, NDA y Stack Overflow .
Me sorprende que nadie haya llegado a esta respuesta todavía:
En todas mis pruebas, cuando se descarta un controlador de vista modal, la orientación preferida del controlador de vista padre establecida en shouldAutorotateToInterfaceOrientation
se shouldAutorotateToInterfaceOrientation
incluso cuando es parte de un UINavigationController. Entonces la solución a esto es simple:
Crea un UIViewController ficticio con un UIImageView para un fondo. Establezca la imagen en la imagen predeterminada.png que su aplicación usa al inicio.
Cuando se llama a viewWillAppear
en su controlador de vista raíz, simplemente presente el controlador de vista ficticio sin animación.
Cuando se llama a viewDidAppear
en su controlador de vista ficticia, descarte el controlador de vista con una agradable animación de disolver cruzada.
¡Esto no solo funciona, sino que se ve bien! Por cierto, solo por aclaración hago que la vista del controlador de vista raíz viewWillAppear
esta manera:
- (void)viewWillAppear:(BOOL)animated { if ( dummy != nil ) { [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; [self presentModalViewController:dummy animated:NO]; [dummy release]; dummy = nil; } ... }
La última guía de progtwigción del sistema operativo de iPhone tiene una sección completa sobre esto, con código de muestra. Estoy seguro de que esta es una adición reciente, así que quizás te lo perdiste. Explica todas las condiciones que debe cumplir; básicamente…
Busque “Lanzar en modo paisaje”, página 102.
Ver esta respuesta: Modo Paisaje SOLAMENTE para iPhone o iPad
Aunque si estás utilizando modos mixtos, es posible que estés mejor con
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];