objective - C:从URL加载图片?

时间:2012-08-27 10:56:23

标签: iphone objective-c uitableview uiimageview

对不起问题标题。我找不到合适的头衔。

当我打开UITableView视图未加载时,我会从网址获得UITableView个内容图片,直到图片加载并且需要时间。

我通过php从JSON获取图像。

我想显示表格,然后显示图片加载过程。

这是我的应用程序中的代码:

NSDictionary *info = [json objectAtIndex:indexPath.row];
cell.lbl.text = [info objectForKey:@"title"];
NSString *imageUrl = [info objectForKey:@"image"];
cell.img.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]]];
[cell.img.layer setBorderColor: [[UIColor blackColor] CGColor]];
[cell.img.layer setBorderWidth: 1.0];

return cell;

抱歉,我的英语很弱。

4 个答案:

答案 0 :(得分:7)

在单独的线程上执行Web请求,以阻止UI。以下是使用NSOperation的示例。请记住仅更新主线程上的UI,如performSelectorOnMainThread:

所示
- (void)loadImage:(NSURL *)imageURL
{
    NSOperationQueue *queue = [NSOperationQueue new];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc]
                                        initWithTarget:self
                                        selector:@selector(requestRemoteImage:)
                                        object:imageURL];
    [queue addOperation:operation];
}

- (void)requestRemoteImage:(NSURL *)imageURL
{
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:imageURL];
    UIImage *image = [[UIImage alloc] initWithData:imageData];

    [self performSelectorOnMainThread:@selector(placeImageInUI:) withObject:image waitUntilDone:YES];
}

- (void)placeImageInUI:(UIImage *)image
{
    [_image setImage:image];
}

答案 1 :(得分:2)

您必须使用NSURLConnectionNSURLRequest。首先创建并显示空表视图(可能是占位符图像,存储在本地应用程序中)。然后你开始发送请求。这些请求将在后台运行,并在请求完成时通知您(代理人)。之后,您可以向用户显示图像。如果您有很多图像,请尽量不要一次加载所有图像。并且不要加载对用户不可见的那些,只有在他向下滚动时才加载它们。

答案 2 :(得分:1)

Apple提供了一个UITableView lazy image loading示例:https://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html

希望这就是你要找的东西

答案 3 :(得分:0)

这是我们在应用程序中非常常见的事情。

您只需将URL存储在持久存储中,例如array或db&可以使用Operation队列获取图像以便更快下载。您可以随时设置优先级,取消操作等。此外,应用程序响应时间会更快。