2010-03-24 14 views
21

Mi aplicación tiene que cargar una imagen desde un servidor http y mostrarla en un UIImageView
¿Cómo puedo hacer eso?
yo probamos este:
Programación de Xcode para iPhone: cargando un archivo jpg en un UIImageView desde la URL

NSString *temp = [NSString alloc]; 
[temp stringwithString:@"http://192.168.1.2x0/pic/LC.jpg"] 
temp=[(NSString *)CFURLCreateStringByAddingPercentEscapes(
    nil, 
    (CFStringRef)temp,      
    NULL, 
    NULL, 
    kCFStringEncodingUTF8) 
autorelease]; 


NSData *dato = [NSData alloc]; 
dato=[NSData dataWithContentsOfURL:[NSURL URLWithString:temp]]; 
pic = [pic initWithImage:[UIImage imageWithData:dato]]; 

Este es el código de viewDidLoad de la vista, pero no se muestra nada! El servidor funciona porque puedo cargar archivos xml desde él. pero no puedo mostrar esa imagen!
Necesito cargar la imagen programáticamente porque tiene que cambiar según el parámetro pasado. Gracias de antemano. Antonio

+0

FYI: no es necesario añadir etiquetas a los mensajes

+0

Su código de mirada extraña, stringwithString: es un método de clase, así que básicamente creo [stringwithString temp: @ "http: // 192.168.1.2x0/pic/LC.jpg "] no es válido. ¿Intentó simplemente usar dato = [NSData dataWithContentsOfURL: [NSURL URLWithString: @ "http: //192.168.1.2x0/pic/LC.jpg"]]? – zonble

+0

suponga que pic es una imagen de su clase, ¿es una asignación lo que quiere hacer? (pic = [pic initWithImage ...]) – KevinDTimm

Respuesta

82

Debería ser:

NSURL * imageURL = [NSURL URLWithString:@"http://192.168.1.2x0/pic/LC.jpg"]; 
NSData * imageData = [NSData dataWithContentsOfURL:imageURL]; 
UIImage * image = [UIImage imageWithData:imageData]; 

Una vez que tenga la variable image, se puede tirar en un UIImageView vía es image propiedad, es decir:

myImageView.image = image; 
//OR 
[myImageView setImage:image]; 

Si tiene que escapar caracteres especiales en su cadena original, puede hacer:

NSString * urlString = [@"http://192.168.1.2x0/pic/LC.jpg" stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
NSURL * imageURL = [NSURL URLWithString:urlString]; 
.... 

Si va a crear su UIImageView mediante programación, que hace:

UIImageView * myImageView = [[UIImageView alloc] initWithImage:image]; 
[someOtherView addSubview:myImageView]; 
[myImageView release]; 
+0

muchas gracias, ¡no sabía cómo funcionaba UIImageView! ¡fue tan simple! ¡Muchas gracias! –

+0

warning, dataWithContentsOfURL: no es asincrónico ... podrías bloquear el hilo principal aquí ¿verdad? – Goles

+0

He encontrado que las imágenes cargadas desde una url aparecen borrosas en comparación con la misma imagen cargada localmente usando [self.imageView setImage: [UIImage imageNamed: @ "AKL.JPG"]]; –

3

probar este

NSURL *url = [NSURL URLWithString:@"http://192.168.1.2x0/pic/LC.jpg"]; 
NSData *data = [NSData dataWithContentsOfURL:url]; 
UIImageView *subview = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f,320.0f, 460.0f)]; 
[subview setImage:[UIImage imageWithData:data]]; 
[cell addSubview:subview]; 
[subview release]; 

todo lo mejor.

3

Este es el código real.

UIImageView *myview=[[UIImageView alloc]init]; 

    myview.frame = CGRectMake(0, 0, 320, 480); 

    NSURL *imgURL=[[NSURL alloc]initWithString:@"http://soccerlens.com/files/2011/03/chelsea-1112-home.png"]; 

    NSData *imgdata=[[NSData alloc]initWithContentsOfURL:imgURL]; 

    UIImage *image=[[UIImage alloc]initWithData:imgdata]; 

    myview.image=image; 

    [self.view addSubview:myview]; 
3

Debe cargar la imagen en segundo plano o la vista se congelará. Prueba esto:

UIImage *img = [[UIImage alloc] init]; 

dispatch_async(dispatch_get_global_queue(0,0), ^{ 

    NSData * data = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:@"http://www.test.com/test.png"]; 
    img = [UIImage imageWithData: data]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     //PUT THE img INTO THE UIImageView (imgView for example) 
     imgView.image = img; 
    }); 
}); 
Cuestiones relacionadas