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
Ç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];
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:
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];
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;
});
});
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.