Pantalla retina para una image de URL

Tengo algunas imágenes que necesito para get de la web. Simplemente usando datos de una URL.
Deben mostrarse correctamente en Retina Display.
Cuando obtengo las imágenes de la web, todavía se ven pixeladas. Necesito configurar la escala de las imágenes en la pantalla retina (2.0), pero debo faltar algo. Esto es lo que hice hasta ahora.

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]; 

Su código debería funcionar prácticamente tal como está. No sé cuáles eran las dimensiones originales de su image, pero creo que eran 64×64 px. Para escalar correctamente, la image original tendría que ser de 128×128 px.

Como testing, el siguiente código muestra correctamente mi foto en la resolución Retina en el Simulador y en mi iPhone 4:

 UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.seenobjects.orghttp://iosberry.commediumlarge/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 count que UIImageView tiene 375×249.5 puntos, que es la mitad de las dimensiones originales (píxeles) 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á un blob opaco de datos, sin dejar rastro del nombre del file. Es esa información opaca que luego pasa a imageWithData: para cargar la image).

Intente agregar #@2x.png al final de su URL. Eso no cambiará la URL, pero la image será reconocida como una image retina @ 2x. Funcionó para mí, pero utilicé este método con SDWebImage .

por ejemplo, utilizando http://www.msdomains.com/tmp/test.png#@2x.png .

Para la visualización retina, agregue la misma image con la resolución que es exactamente el doble de la image original. no olvide agregar "@ 2x" al final de este nombre de image … ej. "image_header.png" es una image 320×100, entonces se seleccionará otra image con el nombre "image_header@2x.png" (dimensión 640×200) para la retina mostrar automáticamente por el sistema operativo … espero que ayude

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

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

No te dará una image de retina.

Por lo tanto, su image es 200×200, pero si su imageView es 100×100, tomará 100×100 de la image descargada y mostrará una image pixelada en los dispositivos retina.

La solución sería utilizar la propiedad de image de imageView en lugar de imageURL.

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

Esto asignará una image de 200×200 a la image de 100×100 y, por lo tanto, la image no será pixelada.