2

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

当我打开视图时,我有UITableView来自 url 的内容图像,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

4 回答 4

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];
}
于 2012-08-27T12:52:05.387 回答
2

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

于 2012-08-27T10:59:16.013 回答
1

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

希望这是您正在寻找的

于 2012-08-27T12:45:59.533 回答
0

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

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

于 2012-08-27T11:54:26.447 回答