18

Hola tengo una aplicación y tengo dos .pngs * para la pantalla de bienvenida por defecto:¿Cómo puedo detectar la orientación en el lanzamiento de la aplicación para la animación de la pantalla de bienvenida en el iPad?

predeterminado-Landscape.png predeterminado-Portrait.png

Lo que quiero es a animar esta pantalla de inicio por defecto de distancia cuando mi aplicación está cargada y lista para funcionar.

Para lograr esto normalmente presentaría un UIImageView con paisaje predeterminado o retrato predeterminado (dependiendo de la orientación del dispositivo), manténgalo en pantalla durante un tiempo determinado y luego anímelo.

Mi problema es que si llamo [[UIDevice currentDevice] orientation] en

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

La respuesta es siempre que el dispositivo está en orientación vertical, incluso si yo claramente lo tengo en el paisaje. Intenté esto en el simulador y en el dispositivo también y el comportamiento es el mismo.

¿Alguien sabe una solución para este o tal vez algún otro enfoque?

Gracias!

+0

¿Ha encontrado una solución para esto? – bzlm

+0

@Horatiu Paraschiv También estoy teniendo este problema. ¿Puedes ayudarme a encontrar la solución? –

Respuesta

1

Tal vez podría mostrar una vista en blanco con fondo negro en el momento de inicio y colocar [[UIDevice currentDevice] orientation] en el viewDidAppear de esta vista y comenzar su pantalla de bienvenida desde allí?

+1

Esto funcionaría y haría lo que usted quisiera, pero va en contra de las pautas en el HIG de iOS: la imagen de inicio no pretende ser una pantalla de bienvenida, y las aplicaciones de iOS no deberían usar pantallas de bienvenida. –

1

Otra solución sería leer los datos del acelerómetro y determinar la orientación usted mismo.

-2

Parece que no está utilizando la imagen de inicio de la forma que recomienda Apple en el iOS HIG. Específicamente indica que no debe usarlo como pantalla de inicio, sino más bien como una versión básica de su interfaz de usuario real. El efecto neto es que tu aplicación parece estar lista mucho más rápido.

Las sugerencias de que podría dibujar una pantalla de bienvenida usted mismo después de que la aplicación se inicie en viewDidAppear o similar también le falta el propósito básico de una imagen de inicio. No es una pantalla de presentación. Si su aplicación está lista, permita que el usuario interactúe con ella, no pierda el tiempo dibujando una pantalla de bienvenida.

De mi encuesta de cinco minutos de aplicaciones de Apple y aplicaciones de terceros, todo el mundo mostró una imagen de lanzamiento vertical, cargó la versión vertical de la interfaz de usuario y luego rotó a horizontal. Ha pasado un tiempo desde la programación en iOS, pero creo que esto refleja el orden de las llamadas al método: primero se lanza su aplicación, luego se le indica que gire a una orientación particular.

podría ser una solicitud de mejora agradable a presentar con Apple aunque :)

+0

Gracias por la respuesta documentada. Aunque tengo una opinión diferente. Apple recomienda que utilice una versión básica de su interfaz de usuario real para engañar al usuario de que la aplicación se está cargando más rápido de lo que realmente es. Al pasar este truco menor, la mayoría de las aplicaciones utilizan una pantalla de bienvenida con el logotipo de la compañía o algo atractivo para llamar la atención del usuario hasta que la aplicación esté lista para funcionar. –

+0

Lo que quiero hacer es hacer que la transición entre la pantalla de presentación y mi UI sea más uniforme (agregue un efecto) mejorando así la experiencia del usuario. La transición sería 0.3-0.5 segundos como máximo, así que no creo que el usuario sienta que esto es una pérdida de tiempo. –

3

Para solucionar este problema he instalado la vista de la imagen de bienvenida en el interior de un controlador de vista que permitió a ambas orientaciones. Aunque el dispositivo informó la orientación incorrecta al inicio, el controlador de vista parece obtener el correcto.

-1

Sin duda, hay momentos en los que desea pasar de la imagen de carga a otra cosa antes de que el usuario controle su aplicación. A menos que su aplicación sea realmente simple, pasar de cargar la imagen a la página de aterrizaje probablemente no será suficiente sin hacer que la experiencia de la aplicación realmente apetezca. Si alguna vez desarrolla una aplicación grande, definitivamente querrá hacerlo para mostrar el progreso durante la instalación, la carga de xibs, etc. Si una aplicación tarda varios segundos en prepararse sin comentarios, los usuarios la odiarán. OMI, tampoco hay nada de malo en un buen efecto de transición.Casi nobody usa pantallas de carga de la manera que Apple sugiere. No sé qué aplicaciones miró que mostraban las pantallas de carga tipo "UI vacía" que sugieren. Diablos, incluso Apple no hace eso excepto en su código de muestra y ninguno de mis clientes lo consideraría aceptable. Es un diseño cojo.

+1

Eh ... eso fue en respuesta a Alex. – Dave

1

Para saber en un principio cuál es la orientación (orientación no funciona hasta que el usuario haya girado el dispositivo) intercepte shouldAutorotateToInterfaceOrientation de su Controlador de Vista, se llama al inicio y conoce la orientación de su dispositivo.

-1

Solo la primera vista agregada a la ventana es rotada por el sistema operativo. Por lo tanto, si desea que su pantalla de bienvenida gire automáticamente Y su vista principal sea rotativa, simplemente agréguela como elemento secundario de esa vista.

Aquí está mi código de la imagen de la pantalla de bienvenida apropiada desapareciendo:

// Determine which launch image file 
NSString * launchImageName = @"Default.png"; 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation])) { 
     launchImageName = @"Default-Portrait.png"; 
    } else { 
     launchImageName = @"Default-Landscape.png"; 
    } 
} 

// Create a fade out effect 
UIImageView* whiteoutView = [[[UIImageView alloc] initWithFrame:self.window.frame] autorelease]; 
whiteoutView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
whiteoutView.autoresizesSubviews = YES;   
whiteoutView.image = [UIImage imageNamed:launchImageName]; 
[[[self.window subviews] objectAtIndex:0] addSubview:whiteoutView]; 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5]; 
whiteoutView.alpha = 0.0; 
[UIView commitAnimations]; 

Nota: Vas a tener que actualizarlo para soportar pantallas de alta resolución.

+2

No funciona, la [UIDevice currentDevice] orientation] está "indefinida" para el uso de la pantalla de presentación. –

5

Tuve problemas con esto y lo resolví haciendo una imagen de 1024x1024 y configurando el modo de contenido del UIImageView en UIViewContentModeTop, luego usando el aumento de tamaño del margen izquierdo y derecho. Siempre que sus imágenes predeterminadas de retrato y paisaje tengan el mismo diseño, esto funcionará bien.

Solo para aclarar aquí es lo que solía:

bgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:SplashImage]]; 
bgView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; 
bgView.contentMode = UIViewContentModeTop; 
+0

Gran idea: terminé haciendo esto también. –

3

Usted puede utilizar UIApplication statusBarOrientation de la siguiente manera:

if (UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) 
    { 
    // landscape code 
    } 
else 
    { 
    // portrait code 
    } 
Cuestiones relacionadas