2012-07-15 21 views
6

Tengo algunas imágenes que necesito obtener de la web. Solo usando datos de una URL.
Necesitan mostrarse correctamente en Retina Display.
Cuando obtengo las imágenes de la web, todavía se ven pixeladas. Necesito establecer la escala de las imágenes en retina display (2.0), pero me falta algo. Esto es lo que hice hasta ahora.Pantalla Retina para una imagen de URL

UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:@"http://www.msdomains.com/tmp/test.png"]; 

CGRect labelFrame = CGRectMake(0,0,64,64); 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:labelFrame]; 
imageView.contentScaleFactor = [UIScreen mainScreen].scale; 

[imageView setImage:img]; 
[self addSubview:imageView]; 
[imageView release]; 

Respuesta

3

El código debería trabajar más o menos como está. No sé cuáles eran las dimensiones originales de su imagen, pero supongo que eran 64x64 px. Para escalar correctamente, la imagen original debería ser de 128x128 px.

Como prueba, el siguiente código muestra correctamente mi foto en la resolución de la retina en el simulador y en mi iPhone 4:

UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.seenobjects.org/images/mediumlarge/2006-08-19-native-lilac.jpg"]]]; 

CGRect labelFrame = CGRectMake(0, 0, 375, 249.5); 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:labelFrame]; 

[imageView setImage:img]; 
[self.view addSubview:imageView]; 

Tenga en cuenta que la UIImageView es 375x249.5 puntos, que es la mitad de la dimensiones originales (pixel) de la foto. Además, configurar el contentScaleFactor no parecía ser necesario.

(Como un aparte, no puedo ver que especificar @2x en la URL ayudará, en este caso, como la llamada a dataWithContentsOfURL: devolverá una burbuja opaca de datos, sin dejar rastro del nombre de archivo. Es que datos opacos que luego pasan a imageWithData: para cargar la imagen.)

7

Intente agregar #@2x.png al final de su URL. Eso no cambiará la URL, pero la imagen se reconocerá como una imagen retina @ 2x. Me funcionó, pero usé este método con SDWebImage.

p. Ej. usando http://www.msdomains.com/tmp/test.png#@2x.png.

+0

¿Esto es real? – Ali

+0

no funciona para mí –

+0

¿es esto una broma? – deadlock

0

Para la pantalla retina, agregue la misma imagen con la resolución que es exactamente el doble de la imagen original. no olvide agregar "@ 2x" al final de este nombre de imagen ... p. "image_header.png" es una imagen 320x100 continuación otra imagen con el nombre "[email protected]" (dimensión 640x200) será seleccionado para la visualización de la retina de forma automática por el sistema operativo ... creo que sirve

+0

Te estás perdiendo el punto aquí: lo que sugieres es correcto para las imágenes cargadas del paquete principal, eso es todo. – Ali

0

cuando asigna directamente la imagen URL a imageView, no lo tomará como retina.

imageView.imageURL = [NSURL URLWithString:@"http://example.com/image.png"]; 

no le dará una imagen de retina.

Por lo tanto, a pesar de que su imagen es de 200x200, pero si su imageView es 100x100, tomará 100x100 de la imagen descargada y mostrará la imagen pixelada en dispositivos retina.

La solución sería usar la propiedad de imagen de imageView en lugar de imageURL.

imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://example.com/image.png"]]]; 

Esto asignará una imagen de 200x200 a la imageView de 100x100 y, por lo tanto, la imagen no se pixelada.

Cuestiones relacionadas