Esto es sólo una aplicación de prueba, sólo Hay una clase AppDelegate para crear todo lo que hice fue crear una Ventana de la base de la aplicación, establezca la apoyó orientaciones, de manera que sólo el paisaje en la información.plist y, a continuación, agregue el código siguiente:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
[application setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft];

//Override point for customization after application launch.
UIAlertView *test = [[UIAlertView alloc] initWithTitle:@"hu" message:@"hui" delegate:nil cancelButtonTitle:@"hi" otherButtonTitles:nil];
[test show];
[window makeKeyAndVisible];
    NSLog(@"win %f - %f", window.bounds.size.width, window.bounds.size.height);
return YES;
}

Sin la primera línea, que establece el estado de la orientación de la barra, a la vista de alerta aparece en el retrato aunque el resto de la interfaz es en el paisaje de la izquierda.

De todos modos el Registro todavía da esto:

win 768.000000 - 1024.000000

Esto es al revés (y por lo tanto cuando puedo añadir subvistas en mi aplicación real de los marcos no son correctos)

Apple parece realmente han arruinado en la interfaz de rotación, porque he tenido nada más que problemas, no recuerdo nada de esto ocurre en el iPhone, así que por favor alguien me puede decir como solucionar esto.

Voy a dar 500 puntos de reputación (que es todo, pero un 10 de mi reputación) a la persona que al menos pueda explicar por qué sucede esto y esperamos que proporcionan una solución.

Que el SDK de la versión estás usando?
¿Por qué estás haciendo eso en el AppDelegate? Para evitar esto yo crear un BOOL en el AppDelegate que es Falso hasta que se llama al método donde se cambia a TRUE. A continuación, en la viewWillLoad en mi MainVC puedo iniciar un temporizador que comprueba si el AppDelegate BOOL es CIERTO. Si es que me incendio el método que muestra la alerta. Para que se vea más bonito que yo también mostrar la imagen por Defecto en mi MainVC hasta que aparezca el mensaje. Esto puede parecer un chapucero, pero no siempre tengo para mostrar la vista de alerta por lo que me marque que demasiado.

OriginalEl autor Jonathan. | 2010-10-19

7 Comentarios

  1. 17

    Creo que el «El lanzamiento en el Modo de Paisaje» de la la Aplicación de iOS Guía de Programación principalmente explica lo que está sucediendo con su aplicación de prueba:

    Aplicaciones en iOS normalmente lanzamiento en
    el modo de retrato para que coincida con la orientación
    de la pantalla de Inicio. Si usted tiene un
    aplicación que se ejecuta tanto en el retrato
    y modo de paisaje, su aplicación
    siempre debe iniciar en el modo de retrato
    inicialmente y, a continuación, deje su opinión
    los controladores de girar la interfaz como
    es necesario, basándose en el dispositivo
    orientación. Si la aplicación se ejecuta
    en el modo de paisaje, sin embargo,
    debe realizar los siguientes pasos para
    de que se inicie en un paisaje
    la orientación inicialmente:

    • En su solicitud de Información.plist archivo,
      agregar el UIInterfaceOrientation clave y
      establezca su valor en el modo de paisaje.
      Para paisaje orientaciones, usted puede
      establezca el valor de esta clave a
      UIInterfaceOrientationLandscapeLeft o
      UIInterfaceOrientationLandscapeRight.

    • Exponer sus puntos de vista en el modo de paisaje
      y asegúrese de que su autoresizing
      las opciones están configuradas correctamente.

    • Reemplazar el controlador de vista de la
      shouldAutorotateToInterfaceOrientation:
      método y volver SÍ sólo para la
      deseado orientación horizontal y NO
      para la orientación vertical.

    Importante: Los pasos anteriores asumir
    la aplicación utiliza la vista de los controladores
    para gestionar su punto de vista de la jerarquía. Ver
    los controladores de proporcionar un significativo
    cantidad de infraestructura para el manejo de
    los cambios de orientación, así como otros
    complejo de vista relacionados con eventos. Si su
    aplicación no está utilizando la vista
    controladores—como puede ser el caso de la
    los juegos y otras OpenGL ES basado en
    aplicaciones—usted es responsable de
    la rotación de la superficie de dibujo (o
    el ajuste de sus comandos de dibujo) como
    necesarias para presentar su contenido en
    modo de paisaje.

    En términos de la aplicación de prueba, la parte fundamental es la última sección. Usted no tiene un controlador de vista, por lo que son totalmente responsables de la configuración de la interfaz de usuario en la orientación que desee. Es por eso que usted tiene que fijar el estado de la orientación de la barra de forma manual.

    He leído el primer párrafo se dice que las apps de iOS siempre lanzamiento en el modo de retrato y, a continuación, la raíz de controlador de vista gira su vista para que coincida con la orientación del dispositivo inmediatamente y sin animación una vez que se agrega a la ventana. Eso significa que el UIWindow en sí no girar de modo que sus dimensiones serán siempre en términos de una orientación vertical (como tadej5553 ha dicho). Además, los cuadros de todos los UIWindow subvistas también será en términos de una orientación vertical (dado que el marco es siempre definida en la vista principal de coordenadas). Así que, no importa cómo usted girar el dispositivo, la raíz de controlador de vista del marco estará siempre en términos de una orientación vertical. Sin embargo, desde una vista de los límites de la propiedad se define en términos de sus propias coordenadas, que la altura y la anchura debe reflejar la actual orientación de la vista.

    No está claro lo que estamos tratando de lograr con su aplicación real, pero la práctica recomendada es de exponer tus puntos de vista para la orientación vertical y, a continuación, establezca su autoresizing propiedades para controlar la rotación automática (si se producen inmediatamente después del inicio de la aplicación o más tarde).

    Muy buena respuesta, así que voy a aceptarlo y empezar otra recompensa (no de 500 :\) cuando puedo y el premio es para ti, sin embargo, yo personalmente prefiero Deniz la respuesta, él recibirá la recompensa. Puedes explicar bien por qué sucede, en general, que es realmente útil para mí y si yo podría dividir la recompensa ahora me gustaría.
    El iPad es una excepción a la regla, porque es el centro de la pantalla se puede girar en el paisaje.

    OriginalEl autor Tim Isganitis

  2. 10

    UIWindow no sabe nada acerca de la rotación. Métodos de rotación son encapsulados en UIViewController. (auto rotaciones, etc)

    UIAlertView utiliza UIApplication del statusBarOrientation propiedad para elegir alerta de la orientación.

    //Rotate to a specific orientation.  This only rotates the status bar and updates the statusBarOrientation property.
    //This does not change automatically if the device changes orientation.
    @property(nonatomic) UIInterfaceOrientation statusBarOrientation;

    Como se puede ver en el SDK de encabezados, statusBarOrientation no cambia automáticamente. Así que usted o UIViewController (rotación automática) debe cambiar esta propiedad.

    Si usted comienza retrato (lo cual es consistente con UIWindow la orientación por defecto), y el uso shouldAutorotateToInterfaceOrientation y dejar UIViewController a la rotación de la manija, cambios UIApplication del statusBarOrientation en cada dispositivo de cambio de orientación.

    Pero Si inicio en modo horizontal, debe establecer manualmente statusBarOrientation por una vez.

    Espero que esto ayude.

    Gracias por explicar lo de los términos de UIAlertView y diciendo lo que debo hacer.
    He pasado mucho tiempo tratando de resolver esto antes de encontrar esta solución. Poner [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animados:NO]; como la primera línea de mi loadView hizo el trabajo. Gracias!
    Creo que acabo de perder 2 horas tratando de hacer que mi aplicación para iPad (iOS5) para iniciar en el paisaje. Esto funciona, muchas gracias.

    OriginalEl autor Deniz Mert Edincik

  3. 4

    Ventana siempre te dará el tamaño y la orientación vertical. Siempre.

    Pero las opiniones en él se dan las medidas correctas (con respecto a la orientación), así que asegúrese de usar los.

    Yo solo hice esto, y así se cambia la barra de estado de la diferencia (20 píxeles) correctamente pero sigue sin cambiar la anchura y la altura.
    El ancho es todavía como 768 cuando en el paisaje (la altura de la pantalla en horizontal es de 1024) y viceversa en el retrato
    el uso de los límites, no en el marco de la vista para obtener las coordenadas correctas

    OriginalEl autor tadejsv

  4. 3

    Lugar de manualmente jugar con la barra de estado, pruebe a establecer UISupportedInterfaceOrientations a UIInterfaceOrientationLandscapeLeft en su información.plist archivo. A continuación, la aplicación debería estar todo listo para ir una vez que lo inicie.

    Manualmente la configuración de la barra de estado de la orientación es una especie de «bajo nivel». Su punto de vista de los controladores también la necesidad de volver UIInterfaceOrientationLandscapeLeft en el shouldAutorotateToInterfaceOrientation método de instancia.

    Por favor, vuelva a leer mi pregunta 🙂 uno pensaría que lo que sugieren iba a funcionar, pero no es así.
    ehh lo siento
    ¿Por qué no tienen ninguna UIViews? Siempre estás supone que tiene un contenedor de UIView dentro de su ventana como lo que yo sé. No estás poniendo el widget de vistas directamente dentro de la ventana o algo ¿?
    Bueno, en mi verdadera aplicación (la que hablo en esta pregunta es jus tratando de llegar a trabajar)tengo una subclase de UIViewController, y cuando puedo agregar es vista en la Aplicación Delegado usando la ventana.marco como el punto de vista del marco añade la vista con dimensiones de modo vertical (de modo que la parte inferior de la vista es corta y hay un hueco a la derecha)
    Simplemente se niega a tener la ventana.tamaño de fotograma de la manera correcta ronda, se debe transponer la anchura y la altura cuando la interfaz de gira pero debido a que las ventanas de marco.el tamaño es incorrecta significa que la subvista del marco.el tamaño está mal y entonces es la subvista de subvistas.

    OriginalEl autor Nimrod

  5. 3

    Aquí es lo que he hecho para conseguir que esto funcione:

    • En la Información.plist, asegúrese de tener los siguientes parámetros:
      • De la interfaz inicial de orientación = Horizontal (a la derecha del botón home)
      • Interfaz compatible con las orientaciones
        • Elemento 0 = Horizontal (a la derecha del botón home)
        • Elemento 1 = Horizontal (a la izquierda del botón home)
    • Agregar un xib basado en controlador de vista, con una vista en la que el auto cambia de tamaño (eliminar el problema de cambio de tamaño, etc.)
      • Nota he utilizado un controlador de navegación aquí con un controlador de vista, porque es lo que tenía a mano, pero creo que esto debería trabajar con un solo VC así.

    Añadir un poco de código a la aplicación delegado:

    _rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 
    _navigationController = [[UINavigationController alloc] initWithRootViewController:self.launcherViewController];
    [window addSubview:self.navigationController.view]; //I think this is the key.
    [window makeKeyAndVisible];

    Creo que la clave es el punto de vista, lo he probado sin ella y en el iPhone ha funcionado bien, en el iPad, aunque la alerta se presentó en el modo de retrato, como usted dice. Cuando he añadido el punto de vista de la espalda de la alerta se muestra en el modo de paisaje como desee.

    OriginalEl autor ImHuntingWabbits

  6. 0

    He tenido nada pero los problemas codificar mi App para Paisaje único modo. Un montón de tiempo que no había problema visual, pero los botones en la parte inferior de 20 píxeles no fueron capaces de ser seleccionado. Hice un clipToBounds mi principal UIWindow y añadido un borde en su capa y pude ver que el UIWindow estaba debajo de la barra de estado. He intentado cambiar mi desplazamiento x de mi UIWindow a ser de 20 (UIWindow todavía está en el Retrato, su contenido es el Paisaje) pero esto significaba mi UIControllers se desplaza hacia abajo por 20 píxeles (No sé por qué). Aunque este es un problema diferente a la tuya también me encontré con el mismo problema que usted tiene en que los límites y marcos cuando impresos parecen ser correctas.

    De todos modos para cortar una larga historia corta que he cambiado mi plist de UIInterfaceOrientationLandscapeLeft a UIInterfaceOrientationLandscapeRight y también cambió mi UIViewController método:

    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    {
      return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
    }

    Y todos mis problemas desaparecieron. Muchas veces he jurado que no hay errores en las Manzanas de rotación de código que va a ser la forma en que me han implementado algo, pero creo que esta es definitivamente una Manzana.

    Hágamelo saber si esto soluciona tu problema

    OriginalEl autor Brett

Dejar respuesta

Please enter your comment!
Please enter your name here