Aplicación iPhone en modo apaisado, sistemas 2008

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.

Respuesta histórica solamente Espectacularmente desactualizado:

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:

  1. establece tu orientación en UISupportedInterfaceOrientations en el archivo Info.plist
  2. en su ventana, defina un controlador de vista base de 480×320 “. Cada otra vista se agregará como una subvista a su vista.
  3. en todos los controladores de vista configure el método shouldAutorotateToInterfaceOrientation: para devolver el mismo valor que definió en el plist, por supuesto)
  4. 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

  • diseño de paisaje de constructor de interfaz
  • constructor de interfaz diseño de paisaje-1

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…

  • establecer las propiedades Info.plist (esto cambia la posición de la barra de estado, pero no la vista)
  • rotar la vista manualmente alrededor de su centro, en su método UIViewController viewDidLoad: o en su método applicationDidFinishLaunching: o implementar la rotación automática (“Autoreizar comportamientos”, página 124)

Busque “Lanzar en modo paisaje”, página 102.

Ver esta respuesta: Modo Paisaje SOLAMENTE para iPhone o iPad

  1. agregar orientación a plist
  2. shouldAutorotateToInterfaceOrientation = SÍ en todos los archivos

Aunque si estás utilizando modos mixtos, es posible que estés mejor con

 [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];