2012-04-12 24 views
8

Estoy desarrollando una aplicación que usa iOS 5.1 y estoy experimentando un comportamiento extraño con los archivos default.png.iOS 5.1 y Default.png

He añadido los siguientes archivos a mi solicitud:

Default.png - (iPhone)

[email protected] - (iPhone Retina)

predeterminado-Retrato ~ ipad .png - (iPAD)

[email protected]~ipad.png - (iPad Retina)

Cuando se inicia la aplicación, parece que selecciona la imagen Default.png correcta para usar en cada ocasión. Sin embargo en mi AppDelegate tengo una pantalla de presentación simple de hacer más suave la carga de la aplicación y la transición a la aplicación, haciendo algo como:

UIImageView *splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,window.frame.size.width, window.frame.size.height)]; 
splashView.image = [UIImage imageNamed:@"Default"]; 

[window addSubview:splashView]; 
[window bringSubviewToFront:splashView]; 

Sin embargo, el [UIImage imageNamed:@"Default"] a su vez no selecciona el archivo correcto para cada dispositivo y creo que el problema es la parte -Portrait del nombre de archivo.

Así como una solución rápida que hice esto:

if(([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)) { 
    // Force the image used by ipads 
    if([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0) { 
     splashView.image = [UIImage imageNamed:@"[email protected]~ipad"]; 
    } 
    else { 
     splashView.image = [UIImage imageNamed:@"Default-Portrait~ipad"]; 
    } 
} 
else 
    splashView.image = [UIImage imageNamed:@"Default"]; 

¿Es así como yo debería estar haciendo esto? ¿Esto te parece gracioso?

+0

¿Te parece gracioso? eso es gracioso – Krishnabhadra

+0

Prueba algunos NSLogging para ver qué está sucediendo exactamente. –

+0

@rokjarc ¿Cómo puede NSLog qué archivo está siendo seleccionado por el SDK cuando hace un simple '[UIImage imageNamed: @" Default "]'? – mobius

Respuesta

4

Para obtener información oficial aquí a echar un vistazo a: App-Related Resources

Para imágenes Launch utilizar este formato:

<basename><orientation_modifier><scale_modifier><device_modifier>.png 

Parece que sería mejor usar:

Default.png - (iPad) 

[email protected] - (iPad Retina) 

Default~iphone.png - (iPhone) 

[email protected]~iphone.png -(iPhone Retina) 

Esto debería le da la imagen adecuada, incluso si se utiliza simplemente:

splashView.image = [UIImage imageNamed:@"Default"]; 
+1

'- [UIImage imageNamed:]' no funciona: como se destacó @mobius, el problema está en el modificador de orientación. Así que algo como Default ~ ipad.png funcionará, pero Default-Portrait ~ ipad.png no funciona con '- [UIImage imageNamed:]' (aunque en el momento del lanzamiento el iPad recoge la imagen correcta). –

0

http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/App-RelatedResources/App-RelatedResources.html

 
App Launch (Default) Images 
<basename><usage_specific_modifiers><scale_modifier><device_modifier>.png 

Providing Launch Images for Different Orientations 
<basename><orientation_modifier><scale_modifier><device_modifier>.png 

Providing Launch Images for Custom URL Schemes 
<basename>-<url_scheme><scale_modifier><device_modifier>.png 
2

Una vez que mi aplicación universal ha terminado de cargar, que muestran una copia de la pantalla de inicio en un UIImageView y luego se desvanecen a cabo, para dar una transición suave entre el lanzamiento y la aplicación de estar listo. Aquí está el código que uso para determinar qué imagen usar:

// choose the correct launch image for orientation, device and scale 
    NSMutableString *launchImageName = [[NSMutableString alloc] initWithString:@"Default"]; 
    BOOL isPad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad); 
    if(isPad) 
    { 
     BOOL isLandscape = UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]); 
     NSString *imageOrientation = (isLandscape) ? @"Landscape" : @"Portrait"; 

     BOOL isRetina = ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0); 
     NSString *scaleString = (isRetina) ? @"@2x" : @""; 

     // Default-Landscape~ipad.png 
     // [email protected]~ipad.png 
     // Default-Portrait~ipad.png 
     // [email protected]~ipad.png 
     launchImageName = [NSMutableString stringWithFormat:@"%@-%@%@~ipad.png", launchImageName, imageOrientation, scaleString ]; 

    } else { 

     if(CGRectGetHeight(self.view.frame) > 480.f) 
     { 
      // Default-568h.png 
      launchImageName = [NSMutableString stringWithFormat:@"%@-568h.png", launchImageName]; 
     } else { 
      // Default.png 
      // [email protected] 
      launchImageName = [NSMutableString stringWithFormat:@"%@.png", launchImageName]; 
     } 
    } 
    UIImage *launchImage = [UIImage imageNamed:launchImageName]; 
Cuestiones relacionadas