我喜欢使用类似PST Collectionview
的{{1}}。我想将文档目录中的图像加载到Collection视图。首先尝试同步方式但速度太慢..所以我知道如何加载图像与collectionview异步。
在我的 viewdidload 中,我添加了以下代码,以便将图片下载到我的文档目录
UIcollectionview
和collectionview中的cellforitem()方法
dispatch_queue_t imageLoadQueue = dispatch_queue_create("com.aaa.nkp",NULL);
dispatch_async(imageLoadQueue, ^{
usleep(1000000);
docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
for(int i=0; i <[Images count] ;i++){
imgURL = [Images objectAtIndex:i];
[imagePreview addObject:imgURL];
imgData=[NSData dataWithContentsOfURL:[NSURL URLWithString:imgURL]];
[imgData writeToFile:[NSString stringWithFormat:@"%@/%@", docPath, [imgURL lastPathComponent]] atomically:YES];
}
[[self collectionView] reloadData];
});
答案 0 :(得分:1)
您需要更新主线程上的UI。尝试在[[self collectionView] reloadData];
周围包装代码,如下所示:
dispatch_async(dispatch_get_main_queue(), ^{
[[self collectionView] reloadData];
});
答案 1 :(得分:0)
为什么要将图像下载到目录中?
要异步下载图像,我建议您使用SDWebImage。它是一个很棒的库,可以通过cocoapods轻松安装。
这是项目的页面:https://github.com/rs/SDWebImage。
这个lib甚至可以将图像存储在缓存中,所以我认为你可以删除所有这些下载代码。
下载了lib并集成到您的项目后,只需删除所有以前的代码(后台下载),并将其放在您的集合视图的cellForItemAtIndexPath:
内:
// Here we use the new provided setImageWithURL: method to load the web image
[cell.imageView setImageWithURL:[NSURL URLWithString:@"anyURLhere"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
就这样,就像魔术一样。 lib会将placeHolder图像放入imageView,自动异步下载图像,并再次使用下载的图像自动更改占位符图像。试一试。
如果您想了解更多信息,可以查看项目的github页面。