UITableView中显示了许多图像(600宽度,固定高度),我想对instagram实现类似的视觉效果,如下所示:
平滑滚动
图像滚动回屏幕时没有“空白到图像”效果
内存成本最低
我正在使用SDWebImage来执行此操作,但是当SDWebImage下载图像时,它会将解压缩的图像数据缓存到内存中,当应用程序收到低内存警告SDImageCache时,这会快速显示但需要大量内存将刷新所有缓存的图像,当显示的图像滚动回到屏幕时,我们得到“空白到图像”。
我修改了一些代码来实现缓存压缩图像而不是缓存解压缩图像,但新问题出现了:图像解压缩太慢了,这次虽然我们没有得到 “空白到图像”,但只要显示图像,滚动就会延迟。
最后,我发现滞留是由JPEG解压缩引起的,所以我认为我需要使用GPU解压缩JPEG。但是我不知道怎么做,或者是 以这种方式进行优化是完全错误的。有人可以提供帮助吗?
答案 0 :(得分:1)
我也不知道你尝试了什么。但根据我以前的项目。我这样做了:
首先使用延迟加载机制(您可以看到LazyTableImages
演示:https://github.com/taufikobet/Fast-LazyTableImages)。仅下载或加载可见图像。您必须使用另一个线程下载图像
第二次存储具有合适尺寸的图像,可以处理图像的大小并存储图像使用另一个线程不在主线程中,合适尺寸的图像将为您加载图像节省大量时间,如果存储不合适的大小,则在加载图像时,imageView将处理图像的大小。
存储JPEG时,如果要压缩,可以使用以下方法。
UIKIT_EXTERN NSData *UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality); // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)
这只是我的经历。
答案 1 :(得分:0)
我最近使用大图像(2000 * 1000)工作很多,所以我做了很多研究。
首先,你可以了解一下这个快速解码jpeg文件的第三部分lib:libjpeg-turbo。使用此库的示例:link Github