我首先启动后台队列来加载图像,然后在主队列中更新UIImageView的图像。
int i = 0;
for (UIImageView *imageView in self.featuredPhotoImageViewCollection) {
dispatch_async(dispatch_queue_create("imageQueue", NULL), ^{
NSURL *url = [NSURL URLWithString:[featuredPhotos[i] valueForKey:@"url"]];
UIImage *image = [UIImage animatedImageWithAnimatedGIFURL:url];
dispatch_async(dispatch_get_main_queue(), ^{
imageView.image = image;
});
});
i++;
}
然而,它仍然不够快。延迟0.5-1秒。除了使用后台队列之外的任何其他建议吗?
答案 0 :(得分:1)
你误解了后台队列的使用。在您的代码中,iOS将开始执行您的后台代码,同时让主队列完成任何操作,直到完成后台代码,然后更新主队列中的图像视图。
因此,无论你在后台使用什么队列,这些都不会加快你的速度。
正常使用它是 1)显示加载指示, 2)后台队列{做点什么 3)主队列{hide loading indicator&更新UI}}
在您的情况下,我的建议是将GIF图像的快照显示为上面提到的指标。或者您只需显示指标即可。
或者将所有GIF图像预加载到其他地方并在此处显示。加载多个图像总是需要一些时间。
答案 1 :(得分:0)
您可以使用像SDWebImage这样的第三方库来使用缓存,因此它可以将问题减少到第一次下载。它还具有您可能会发现有用的优先级选项。
或者您可以在到达显示的视图之前下载图像。
答案 2 :(得分:0)
如果gif是一个大文件,并且服务器支持多线程下载。那么你可以尝试使用dispatch_group来下载gif。