对不起问题标题。我找不到合适的头衔。
当我打开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;
抱歉,我的英语很弱。
答案 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)
您必须使用NSURLConnection
和NSURLRequest
。首先创建并显示空表视图(可能是占位符图像,存储在本地应用程序中)。然后你开始发送请求。这些请求将在后台运行,并在请求完成时通知您(代理人)。之后,您可以向用户显示图像。如果您有很多图像,请尽量不要一次加载所有图像。并且不要加载对用户不可见的那些,只有在他向下滚动时才加载它们。
答案 2 :(得分:1)
Apple提供了一个UITableView lazy image loading
示例:https://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html
希望这就是你要找的东西
答案 3 :(得分:0)
这是我们在应用程序中非常常见的事情。
您只需将URL存储在持久存储中,例如array或db&可以使用Operation队列获取图像以便更快下载。您可以随时设置优先级,取消操作等。此外,应用程序响应时间会更快。