亲爱的stackoverflowers,
我误入歧途了。
在我的应用程序中,我从网络加载 2 张图片,如下所示:
-(void)loadImages
{
...
image1 = [UIImage imageWithData:[NSData dataWithContentsOfURL:imgUrl1]];
image2 = [UIImage imageWithData:[NSData dataWithContentsOfURL:imgUrl2]];
}
为了不阻塞主线程,我使用GCD:
dispatch_async( dispatch_get_global_queue(0,0), ^{
[self loadImages];
之后,我在我的 UITableView
中使用这些图像:
if (indexPath.row == 0)
{
cell.imageView.image = image1;
}
else
{
cell.imageView.image = image2;
}
然后我决定添加 UIActivityIndicator
,但遇到了一些问题。我知道我的代码不正确。我看到人们使用 NSURLRequest
和 NSURLConnection
加载图像并添加 UIActivityIndicator
。
你能告诉我,最标准的加载图像的方法是什么吗?我应该重写什么?
最佳答案
我建议您使用 AsyncImageView,它是 iCarousel 之父 Nicklockwood 的一个漂亮实现。
https://github.com/nicklockwood/AsyncImageView
使用起来非常简单。
#import "AsyncImageView.h"
并且在所有 imageView 中都这样做。
[imageView setImage:@"default.png"];
[imageView setImageURL:@"whateverurl/whateverimage.png"];
在您的情况下,它将是: [cell.imageView setImageURL:@"yourURL"];
它就像一个魅力,我的代码正在生产中。但是,如果您仍然希望您的代码正常工作,请尝试以下操作:
UIActivityIndicator *activity =[[UIActivityIndicator alloc] initWithStyle:UIActivityIndicatorWhite];
[activity setFrame:CGRectMake(100,100,30,30)];
[self.view addSubview:activity];
dispatch_queue_t dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(dispatchQueue, ^(void)
{
[activity startAnimating];
[self loadImages];
dispatch_sync(dispatch_get_main_queue(), ^{
[yourTableView reloadData];
[activity stopAnimating];
[activty setHidden:YES];
});
});
关于iphone - 从网络加载 UIImage 的最常见方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15865809/