繁体   English   中英

在UIImageView中加载大图像更快

[英]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。

好,但是

  • (1)你不应该NSCache图像
  • (2)您应该将图像缩小到显示所需的最大尺寸
  • (3)你不应该在itemForRowAt:做任何耗费时间的itemForRowAt:你没有展示你的东西) - 你只有几毫秒的时间来制作单元并离开
  • (4)如果您无法及时提供图像,请提供占位符并退出itemForRowAt: ; 你可以随时在拥有真实图像时重新加载
  • (5)完成所有耗时的主线程工作 (包括转换为UIImage并绘制UIImage以缩小它)
  • (6)措施措施措施! 这就是为什么我们有仪器; 不要猜测问题出在哪里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM