2012-10-04 20 views
12

Digamos que tengo tres imágenes en un catálogo conjunto o activo:UIImage imageNamed: no se recupera automáticamente la retina imágenes @ 2x

  1. por defecto ~ iphone.png
  2. [email protected]~iphone.png
  3. [email protected]

En iOS 4 y posteriores, el constructor UIImage puede tomar el nombre de la imagen de la siguiente manera:

[UIImage imageNamed:@"Default"]; 

Cuando estoy en una pantalla retina de 3,5 pulgadas (iphone), selecciona automáticamente la imagen (2). Si en una pantalla sin retina, elige (1). Esto es genial.

Nombré la imagen 3 como se especifica para la imagen de inicio de la retina de 4 pulgadas (iPhone 5). ¿Hay alguna manera de nombrar la imagen (3), de modo que cuando estoy corriendo en una pantalla Retina de 4 pulgadas, se devuelva con el mismo constructor UIImage?

Quizás esto no se haya implementado todavía, o espero demasiado de la conveniencia ... Estoy tratando de evitar cualquier lógica condicional en mi código para elegir la imagen en función de las dimensiones de la pantalla.

Respuesta

12

También tuve el mismo problema y resultó que no existe tal comportamiento para el iPhone 5/iPod Touch de 5ta generación.

Debe determinar manualmente si su aplicación se está ejecutando en dicho dispositivo y cambiar el nombre del archivo en consecuencia.

He utilizado este método para comprobar si mi aplicación se está ejecutando en un iPhone 5/iPod Touch quinta Gen .:

#define IS_PHONEPOD5() ([UIScreen mainScreen].bounds.size.height == 568.0f && [UIScreen mainScreen].scale == 2.f && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 

A continuación, puede ajustar el nombre de la imagen como esta:

if(IS_PHONEPOD5()) { 
    myImageView.image = [UIImage imageNamed:@"MyImage-568h.png"]; 
} else { 
    myImageView.image = [UIImage imageNamed:@"MyImage.png"]; 
} 

Actualización
También encontré una categoría de UIImage en github (Link) que implementa lo que estás buscando. No tiene un respaldo para archivos que no existen, pero puede implementarlo fácilmente usted mismo.

+0

+1 Esta es una gran categoría. Gracias por el enlace. Técnicamente, sin embargo, ya tiene un respaldo para las imágenes que no existen: simplemente devuelve el método 'UIImage imageNamed: 'con cualquier cadena de nombre original pasada. Esto tiene sentido para mí como el comportamiento deseado en tales casos. –

+0

Eso es lo que pensé. Terminé haciendo una categoría de UIImage similar. – JoelF

2

No hay ningún tipo de imagen de 4 ". Lo único que es diferente de todo lo demás es la inclusión de [email protected] que se usa como imagen de inicio para un iPhone 5 y señala al sistema operativo que su aplicación admite la pantalla más larga. no tiene formato de buzón.

Tiene que ocuparse de código o de diseños automáticos con diferentes tamaños de pantalla. No hay ningún tipo de imagen especial, ya sea un tipo de imagen de pantalla estándar o un tipo de imagen de retina, igual que desde iOS 4.

0

Nueva API de iOS 8 permite cargar versiones de una imagen de la retina llamada, previamente había que determinar los nombres de los archivos a ti mismo:

UIImage* retinaImage = [UIImage imageNamed:@"ImageName" 
    inBundle:nil compatibleWithTraitCollection:nil]; 

NSLog(@"screen scale: %2.2f retinaImage: %@", 
    [UIScreen mainScreen].nativeScale, retinaImage); 
Cuestiones relacionadas