Aplicación para iPhone en modo horizontal, 2008 sistemas


Nota: esta pregunta es de 2008 y ahora solo es de 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 programáticamente como usando el Creador de interfaces.

Author: Vadim Kotov, 2008-08-02

8 answers

Solo respuesta histórica. Espectacularmente anticuado:

Tenga en cuenta que esta respuesta está ahora muy desactualizada.

Este post es solo una curiosidad histórica.


Noticias Emocionantes! Como descubrió Andrew a continuación, este problema ha sido solucionado por Apple en 4.0+.

Parece que ya no es necesario forzar el tamaño de la vista en cada vista, y el grave problema específico del paisaje "solo funciona la primera vez" ha sido resuelto.

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 la cantidad de problemas que causó a los desarrolladores durante tanto tiempo!


Aquí está la discusión y la solución originales. Esto es totalmente irrelevante ahora, ya que estos sistemas ni siquiera son operables.


Es EXTREMADAMENTE DIFÍCIL hacer que esto funcione completamente there hay al menos tres problemas/bugs en juego.

Prueba esto .. interfaz builder diseño del paisaje

Tenga en cuenta en particular que donde dice "y necesita usar shouldAutorotateToInterfaceOrientation correctamente en todas partes" significa en todas partes, todas sus vistas de pantalla completa.

Espero que ayude en esta pesadilla!

Un recordatorio importante del problema adicional conocido aquí: si está tratando de intercambiar entre MÁS DE UNO vista (todo paisaje), SIMPLEMENTE NO LO HACE TRABAJO. Es esencial recordar esto o perderás días en el problema. Literalmente NO ES POSIBLE. Es el mayor error abierto, conocido, en la plataforma iOS. Literalmente no hay manera de hacer 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 trivial master UIViewController que no hace nada más que sentarse allí y le permite intercambiar entre sus vistas.

En otras palabras, en iOS debido a un conocimiento importante error:

[window addSubview:happyThing.view];
[window makeKeyAndVisible];

Puedes hacer eso solo una vez.. Más tarde, si intentas eliminar happyThing.ver, y en su lugar poner allí newThing.ver, NO FUNCIONA-Y ESO ES TODO. La máquina nunca girará la vista hacia el paisaje. No hay truco fijo, incluso Apple no puede hacer que funcione. La solución que debe adoptar es tener un controlador UIViewController general que simplemente se siente allí y solo mantiene sus varias vistas (happyThing, newThing, etc.). Espero que ayude!

 46
Author: Fattie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-11 13:03:13

Desde el Sitio de Apple Dev:

Para iniciar su aplicación en horizontal modo que la barra de estado está en el posición apropiada inmediatamente, editar tu Información.archivo plist para añadir el UIInterfaceOrientation clave con el valor apropiado (UIInterfaceOrientationLandscapeRight o UIInterfaceOrientationLandscapeLeft), como se muestra en el Listado 2.

Listado 2: Inicio de su solicitud en modo horizontal

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
 40
Author: Michael Pryor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-31 14:38:14

Resumen e integración de todos los mensajes, después de probarlo yo mismo; comprobar la actualización para 4.x, 5.x infra.

A partir de la versión 3.2 no se 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. establezca su orientación en {[0] } en el archivo Info.plist
  2. en su ventana defina una vista base de 480x320 " controlador". 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 establecer 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 Programación de la Aplicación Apple iOS tiene un párrafo "Iniciar en Modo horizontal" en el apartado "Trucos Avanzados de la aplicación" capitulo.

Referencias:

 27
Author: IlDan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-18 13:52:33

Primero me puse en info.plist

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>

Luego pongo 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 manera puedo trabajar en la vista en Interface Builder en modo horizontal.

 7
Author: samvermette,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-20 20:58:38

La respuesta de Sasb y michaelpryor parece ser correcta, pero si no está funcionando para usted, pruebe esta alternativa:

- (void)applicationDidFinishLaunchingUIApplication *)application {
    application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}

O este:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

O este:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

Es posible que también tenga que llamar primero a window makeKeyAndVisible;.

Algunos enlaces: Desarrollo en modo horizontal, iPhone SDK: ¿Cómo forzar solo el modo horizontal?

@ Robert: por favor, consulte El SDK de iPhone, NDA y Stack Overflow.

 6
Author: Sören Kuklau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:30:52

Me sorprende que nadie haya encontrado 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 respeta incluso cuando forma parte de un controlador UINavigationController. Así que la solución a esto es simple:

Cree un controlador UIViewController ficticio con una vista UIImageView como fondo. Establezca la imagen en el valor predeterminado.imagen png que usa tu aplicación al iniciar.

Cuando se llama a viewWillAppear en su controlador de vista raíz, simplemente presente el controlador de vista ficticio sin animación.

Cuando se llame a viewDidAppear en su controlador de vista ficticio, deseche el controlador de vista con una agradable animación de disolución cruzada.

Esto no solo funciona, sino que se ve bien! Por cierto, solo para aclaración hago el controlador de vista raíz viewWillAppear así:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
 5
Author: Arlen Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-27 07:38:02

La última Guía de programación de iPhone OS tiene una sección completa sobre esto, con código de ejemplo. Estoy seguro de que esta es una adición reciente, así que tal vez te lo perdiste. Explica todas las condiciones que tienes que cumplir; básicamente...

  • establece la información.propiedades plist (esto cambia la posición de la barra de estado, pero no la vista)
  • gire su vista manualmente alrededor de su centro, ya sea en su método UIViewController viewDidLoad: o en su método o implementación applicationDidFinishLaunching: rotación automática ("Autoresizing behaviors", página 124)

Busque "Launching in Landscape Mode", página 102.

 4
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-04 21:57:05

Ver esta respuesta: Modo horizontal SOLO para iPhone o iPad

  1. añadir orientación a plist
  2. shouldAutorotateToInterfaceOrientation = YES en todos los archivos

Aunque si estás usando modos mixtos, podrías estar mejor con

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
 3
Author: nicc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:32