Por favor, tenga en cuenta que esta pregunta es del 2008 y ahora es de sólo interés histórico.


¿Cuál es la mejor manera de crear una aplicación para iPhone que se ejecuta en el modo de paisaje desde el principio, independientemente de la posición del dispositivo?

Mediante programación y utilizar el Constructor de interfaces.

  • Para los futuros lectores, por favor, tenga en cuenta que este famoso problema de la está RESUELTO ahora por Apple a partir de 2011. Nota el proyecto de prueba en la respuesta a continuación.

8 Comentarios

  1. 46

    Respuesta histórico único. Espectacular fuera de fecha.

    Por favor, tenga en cuenta que esta respuesta es tan fuera de fecha/

    Esta respuesta es sólo una curiosidad histórica.


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

    Parece ser que ya NO es necesario forzar el tamaño de la vista en cada vista, y el específico problema grave de paisaje «sólo trabajando desde el primer momento» ha sido resuelto.

    De abril de 2011, que no es posible probar o incluso construir cualquier cosa por debajo de 4.0, así que la pregunta es meramente una curiosidad histórica. Es increíble la cantidad de problemas que causó a los desarrolladores por tanto tiempo!


    Aquí está el original de la discusión y solución. Esto es absolutamente irrelevante ahora, ya que estos sistemas no son ni siquiera operable.


    Es EXTREMADAMENTE DIFÍCIL hacer que esto funcione plenamente, hay al menos tres problemas/bugs en el juego.

    probar esta .. generador de interfaz de diseño del paisaje

    Nota en particular de que donde dice «y necesita utilizar shouldAutorotateToInterfaceOrientation correctamente en todas partes» significa en todas partes, todos sus vistas de pantalla completa.

    Espero que ayude en esta pesadilla!

    Un importante recordatorio de la ADICIONAL problema bien conocido en la mano aquí: si usted está tratando de intercambio entre MÁS DE UNA vista (todo el paisaje), SIMPLEMENTE NO funciona. Es esencial recordar que esta o va a perder días en el problema. Es, literalmente, imposible. Es el más grande abierto, conocido, error en la plataforma iOS. Literalmente no hay manera de hacer que el hardware de hacer el segundo punto de vista se carga, paisaje. Los molesto, pero simple solución, y lo que deben hacer, es tener un trivial maestro UIViewController que no hace nada más que sentarse y dejar que se intercambia entre sus puntos de vista.

    En otras palabras, en iOS debido a una importante saber error:

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

    Puede hacer que sólo una vez. Más tarde, si intenta quitar happyThing.vista, y en lugar de poner ahí newThing.vista, NO funciona – Y ESO ES todo. La máquina nunca girar la vista al paisaje. No hay ningún truco revisión, incluso Apple no puede hacer el trabajo. La solución debe adoptar es el de tener una total UIViewController que simplemente se sienta allí y sólo tiene sus diferentes puntos de vista (happyThing, newThing, etc). Espero que ayude!

    • Creo que este ha sido fijado en el 4.x. Le hemos enviado un juego que tenía un montón de diferentes pantallas, paisajes y retratos, y simplemente no funcionan en 3.x. No querer entrar en el extra maniquí de vista de manejar, que en lugar de 4.x — que, un año después de esta pregunta, es probablemente aceptable.
    • No hicimos «siempre paisaje», sino más bien de un modo variado paisaje o retrato. Cada VC es directamente añadirse y eliminarse de la ventana. Lanza aplicación del paisaje, se queda de esa manera a través de varias transiciones de pantalla. No utilizamos un maniquí de vista, pero podemos HACER un override shouldAutorotate en cada pantalla. No hay problemas en 4.x, de toque para el cojín del teléfono.
  2. 40

    De la Apple Dev Sitio:

    Para iniciar su aplicación en el paisaje
    modo que la barra de estado en la
    posición adecuada de inmediato, editar
    su Información.plist archivo para agregar la
    UIInterfaceOrientation clave con el
    valor apropiado
    (UIInterfaceOrientationLandscapeRight
    o
    UIInterfaceOrientationLandscapeLeft),
    como se muestra en el Listado 2.

    Listado 2: a Partir de su aplicación
    en el modo de paisaje

    <key>UIInterfaceOrientation</key>
    <string>UIInterfaceOrientationLandscapeRight</string>
    • Este plus en su shouldAutorotateToInterfaceOrientation métodos de retorno (interfaceOrientation != UIInterfaceOrientationPortrait); y listo.
    • La Pregunta de cómo iniciar el dispositivo en modo horizontal. Las respuestas que da esa información. El manejo de la orientación después de que no se menciona en la pregunta. +1 Michael Pryor
    • Curiosamente, la «respuesta» en el hecho de que NO se inicie el dispositivo en modo de paisaje -!! Es probablemente el más famoso bug/dificultad en todos los de la Manzana medio ambiente. Es un básico para el funcionamiento del iPad del desarrollador!
    • También hay UIInterfaceOrientationPortraitUpsidedown, por lo tanto no es un fix. Además, UIInterfaceOrientation en .plist sólo se admite en 3.2+, no en 3.1.3 y los dispositivos más antiguos (y recuerde iPhone 2G se ha quedado atascado en esa versión).
  3. 27

    Resumen y la integración de todos los puestos de trabajo, después de probar yo mismo; comprobar la actualización para 4.x, 5.x a continuación.

    Como de 3.2 usted no puede cambiar la orientación de una aplicación de ejecución de código.

    Pero puede iniciar una aplicación con una orientación fija, aunque haciendo así que esto no es sencillo.

    Probar con esta receta:

    1. establecer su orientación a UISupportedInterfaceOrientations en el Info.plist archivo
    2. en la ventana de definir un 480×320 «base de controlador de vista». Cada otro punto de vista se añadirá como una subvista a su vista.
    3. en todos los de la vista de los controladores de configurar el shouldAutorotateToInterfaceOrientation: método (a devolver el mismo valor que se define en el plist, por supuesto)
    4. en todos los de la vista de los controladores de establecer una visión de fondo con

      self.view.frame = CGRectMake(0, 0, 480, 320)

      en el viewDidLoad método.

    Actualización (iOS 4.x, 5.x): el iOS de Apple App Guía de Programación tiene una «puesta en marcha en Modo de Paisaje» párrafo en el «Advanced App Trucos» capítulo.

    Referencias:

    • Puedo confirmar que esta es la única, verdaderamente solución de trabajo (con una pequeña adición). Me tomó horas para encontrar y evaluar esto. Todas las otras respuestas son sólo soluciones parciales al problema.
  4. 7

    Principio me puse en la info.plist

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

    a continuación, 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 forma, se puede trabajar en la vista de diseño de Interfaz en el modo de paisaje.

  5. 6

    sasb y michaelpryor la respuesta parece ser la correcta, pero si no funciona para usted, trate de esta alternativa:

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

    O esta otra:

    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

    O esta otra:

    [application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

    Usted también puede tener que llamar a window makeKeyAndVisible; primera.

    Un par de enlaces: Desarrollar en el modo de paisaje, SDK del iPhone: Cómo forzar el modo Paisaje único?

    @Robert: por favor, consulte El SDK del iPhone, NDA, y el Desbordamiento de Pila.

  6. 5

    Me sorprende que nadie ha llegado con esta respuesta:

    En todas mis pruebas cuando una despedir a un modal de controlador de vista de los padres de controlador de vista de la orientación preferida de establecer en shouldAutorotateToInterfaceOrientation es honrado aún cuando forma parte de un UINavigationController. Así que la solución a esto es simple:

    Crear una dummy UIViewController con un UIImageView para el fondo. Establecer la imagen a los valores predeterminados.imagen png usa la aplicación en el inicio.

    Cuando viewWillAppear se llama en su raíz controlador de vista, simplemente presentar las maquetas de vista controlador sin animación.

    cuando viewDidAppear se llama en su maniquí de vista controlador, despedir a la vista controlador con una buena disolución cruzada de animación.

    No sólo este trabajo, pero se ve bien! BTW, para la aclaración que hacer la raíz del controlador de vista del viewWillAppear como este:

    - (void)viewWillAppear:(BOOL)animated
    {
     if ( dummy != nil ) {
      [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
      [self presentModalViewController:dummy animated:NO];
      [dummy release];
      dummy = nil;
     }
    ...
    }
  7. 4

    El último iPhone OS Guía de Programación tiene una sección completa sobre este, con el código de ejemplo. Estoy seguro de que esto es una adición reciente, así que tal vez se lo perdió. Explica todas las condiciones que han de cumplir; básicamente…

    • conjunto de la Información.plist propiedades (esto cambia la posición de la barra de estado, pero no a la vista)
    • girar la vista manualmente alrededor de su centro, en su UIViewController viewDidLoad: método o su applicationDidFinishLaunching: método o implementar la rotación automática («Autoresizing comportamientos» en la página 124)

    Busca «Iniciar en Modo horizontal» en la página 102.

  8. 3

    Ver esta respuesta: Modo de paisaje SÓLO para iPhone o iPad

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

    Aunque si eres el uso de modos mixtos, usted puede ser mejor con

    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Dejar respuesta

Please enter your comment!
Please enter your name here