Программирование iPhone Xcode: загрузка jpg в UIImageView от URL - PullRequest
21 голосов
/ 24 марта 2010

Мое приложение должно загрузить изображение с http-сервера и отобразить его в UIImageView
Как я могу это сделать ??
Я пробовал это:

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

Этот код находится в viewdidload вида, но ничего не отображается! Сервер работает, потому что я могу загружать из него XML-файлы. но я не могу отобразить это изображение!
Мне нужно загрузить изображение программно, потому что оно должно меняться в зависимости от переданного параметра! Заранее спасибо. Антонио

Ответы [ 5 ]

82 голосов
/ 24 марта 2010

Должно быть:

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

Если у вас есть переменная image, вы можете выбросить ее в UIImageView через свойство image, то есть:

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

Если вам нужно экранировать специальные символы в исходной строке, вы можете сделать:

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

Если вы создаете UIImageView программно, вы делаете:

UIImageView * myImageView = [[UIImageView alloc] initWithImage:image];
[someOtherView addSubview:myImageView];
[myImageView release];
6 голосов
/ 31 декабря 2010

А поскольку загрузка изображения с URL-адреса занимает много времени, было бы лучше загрузить его асинхронно. Следующее руководство сделало это глупо-простым для меня:

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

3 голосов
/ 27 января 2015

Вы должны загрузить изображение в фоновом режиме или вид будет зависать. Попробуйте это:

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 голосов
/ 06 ноября 2012

Это фактический код.

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 голосов
/ 24 марта 2010

Попробуйте это

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

Всего наилучшего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...