2011-04-01 19 views
25

Cuando necesitamos descargar una imagen desde alguna URL y mostrarla en dos tipos de dispositivos - Retina (con imagen 2x) y dispositivo normal - ¿Deberíamos tener dos imágenes diferentes? URL para manejar esto?Descargando la imagen normal Vs retina device image (2x)

Para las imágenes en el paquete de recursos mantenemos tanto xyz.png como [email protected] y funciona bien.

Para las imágenes que estamos obteniendo del servidor, necesitamos tener URLs de imagen separadas para ambos tipos de imágenes y almacenarlas en la memoria caché localmente con la misma convención de nomenclatura (xyz.png y [email protected])?

Por favor, arroje algo de luz aquí.

Respuesta

24

Puede verificar si el dispositivo tiene una pantalla de retina de alta resolución y en función de eso descargar una imagen diferente. No te molestes por fotos y cosas que de todos modos escalarías para el tamaño de la interfaz.
puede crear la versión a escala de la imagen descargada con

UIImage *image = //download... 
image=[UIImage imageWithCGImage:[image CGImage] scale:2.0 orientation:UIImageOrientationUp]; 

Tenga en cuenta que una imagen de escala de 100x100 se convertirá en una imagen de 50x50 puntos (con escala de 2.0).

Comprobar primero si usted tiene

BOOL retina = NO; 
if([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) 
    retina = [[UIScreen mainScreen] scale] == 2.0 ? YES : NO; 
+0

Una pregunta aquí una pantalla de retina. si necesitamos almacenar en caché esta imagen en el sistema de archivos, ¿deberíamos guardarla con el formato [email protected]? para que cuando lo recuperemos del sistema de archivos IOS pueda reconocerlo. – Abhinav

+2

@Abhinav la magia @ 2x solo funciona con '[UIImage imageNamed: @" foo "];' Y este método solo funciona con las imágenes que se guardan en el paquete. Y el paquete no puede escribirse, no puede guardar sus imágenes allí. Entonces no tienes una ventaja por esto. PERO el usuario puede usar su software en un dispositivo antiguo, itunes guarda todo, y luego compra un dispositivo con pantalla Retina y restaura la copia de seguridad con todos sus datos de imagen. Él usaría las imágenes normales en un dispositivo de retina entonces. Así que sugeriría utilizar la extensión @ 2x de todos modos, pero debe administrarla manualmente. –

+0

Ok. Por lo tanto, dependiendo de si se trata de un dispositivo retina o no, tendremos que diferenciarnos en el nombre del archivo para que puedan leerse más adelante con ese nombre, ya que IOS no lo manejará. – Abhinav

0
CGFloat screenScale = [UIScreen mainScreen]. 
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:myUrl] scale:screenScale]; 
Cuestiones relacionadas