web-dev-qa-db-fra.com

Programmation iPhone Xcode: chargement d'un fichier jpg dans une UIImageView à partir d'une URL

Mon application doit charger une image à partir d'un serveur http et l'afficher dans un UIImageView
Comment puis je faire ça??
J'ai essayé ceci:

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

Ce code est dans viewdidload de la vue mais rien ne s'affiche! Le serveur fonctionne car je peux en charger des fichiers xml. mais je ne peux pas afficher cette image!
J'ai besoin de charger l'image par programmation car elle doit changer en fonction du paramètre passé! Merci d'avance. Antonio

21
Antonio Murgia

Ça devrait être:

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

Une fois que vous avez la variable image, vous pouvez la jeter dans une UIImageView via sa propriété image, c'est-à-dire:

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

Si vous devez échapper des caractères spéciaux dans votre chaîne d'origine, vous pouvez faire:

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

Si vous créez votre UIImageView par programme, vous faites:

UIImageView * myImageView = [[UIImageView alloc] initWithImage:image];
[someOtherView addSubview:myImageView];
[myImageView release];
82
Dave DeLong

Et parce que le chargement d'une image à partir d'une URL prend du temps, il serait préférable de la charger de manière asynchrone. Le guide suivant a rendu cela simple et stupide pour moi:

http://www.switchonthecode.com/tutorials/loading-images-asynchronously-on-iphone-using-nsinvocationoperation

6
nosuic

Ceci est le code réel.

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

Vous devez charger l'image en arrière-plan ou la vue se fige. Essaye ça:

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;
     });
});
3
ThePunisher

Essaye ça

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

Bonne chance.

3
Warrior