[英]Loading large images faster in UIImageView
是否有一种可接受的方式或更新方式,可以更快地将图像加载到UIImageView中?
我的场景:一个集合视图,带有一个大的UIImageView。 一次只显示1个单元格。 我已经在集合视图上实现了NSCache和Prefetching。 滚动表现中途暂停。 我使用的图像“相对”大,以适应iPad和iPhone布局。 例如,图像为1600x1600px,RGB,PNG。 (从2-5MB压缩,~10MB未压缩,在应用程序中本地存储)
一旦图像被加载,来回滚动通常是正常的,在视觉上~60fps。 但在第一次加载时,它们总是紧张不安。 但是如果我让图像物理上更小,例如800x800,那么它们会很快加载,我看不到滚动时的抖动。 所以我正在处理图像大小与绘图速度问题。 与iPhone X上的5s相同的问题。
[UIImage imageNamed:imageName]
或[UIImage imageWithContentsOfFile:imagePath]
遇到相同的性能[UIImage imageNamed:imageName]
我正在阅读如何在实际绘制之前解压缩UIImages,如果系统必须绘制二次采样图像,它会显着影响主线程性能。 我做了一些仪器测试并确认看起来我的代码实际上都没有慢,PNG的图像绘制速度很慢。
是否有更新的方法来执行类似于下面链接中的内容,IE 在CGContext中绘制图像并希望它保持缓存 ?
https://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/
- (void)decompressImage:(UIImage *)image
{
UIGraphicsBeginImageContext(CGSizeMake(1, 1));
[image drawAtPoint:CGPointZero];
UIGraphicsEndImageContext();
}
https://gist.github.com/steipete/1144242
这对我来说似乎真的有点过头了: https : //github.com/path/FastImageCache
我已经在集合视图上实现了NSCache和Prefetching。
好,但是
itemForRowAt:
做任何耗费时间的itemForRowAt:
你没有展示你的东西) - 你只有几毫秒的时间来制作单元并离开 itemForRowAt:
; 你可以随时在拥有真实图像时重新加载
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.