我想在 imageview 中显示高分辨率图像。这就是我所做的
- 在后台准备 UIImage
- 文件加载完毕,切换到主线程
- 显示图像 [ 使用 UIImageView 的 setImage: ]
问题是第三步有滞后。它需要几秒钟并加载文件。如果它的图像很大,我会收到内存警告和崩溃。那么有没有一种方法可以让我从上到下绘制图像(就像浏览器一样)?我还需要保持图像的质量。
有没有办法可以实现我的要求。提前致谢
我想在 imageview 中显示高分辨率图像。这就是我所做的
问题是第三步有滞后。它需要几秒钟并加载文件。如果它的图像很大,我会收到内存警告和崩溃。那么有没有一种方法可以让我从上到下绘制图像(就像浏览器一样)?我还需要保持图像的质量。
有没有办法可以实现我的要求。提前致谢
UIImage
在实际请求之前不会解码其底层图像数据,当您将其分配给图像视图时,这将在主线程上发生。因此,尽管您尝试在后台线程中加载图像,但工作被延迟并且实际上发生在主线程上。
这个问题的变通方法非常棘手,通常涉及将图像写入新的图形上下文以强制解码,然后从中创建一个CGImageRef
或UIImage
。这一切都发生在后台线程上。当您将新图像发送到主线程时,所有解码都已经发生,您应该不会看到延迟。这个问题有一些答案可以证明这种技术。
使用 Apple 提供的标准 API(据我所知)无法从上到下绘制图像。您必须编写自己的流式图像解码器,这将是一项艰巨的任务。
如果它的图像很大,我会收到内存警告和崩溃。
似乎您正在尝试一次将图像加载并显示到内存中的设备的某些“硬”(内存相关)限制。
那么有没有一种方法可以让我从上到下绘制图像(就像浏览器一样)?
您应该尝试使用 CATiledLayer,它提供了一种绘制非常大的图像而不会导致内存命中的方法。
在这里您可以找到有关它的教程。
您还可以查看PhotoScrollerNetwork项目:
极快的平铺渲染 - 视觉上比 Apple 的代码快得多(在文件系统中使用 png 文件)
您提供单个 jpeg 文件或 URL,此代码为您完成所有平铺,快速而轻松
您可以使用SDWebImage框架来帮助您:
1.异步图片下载器
2.自动图像缓存。
3.避免重复。
您可以从以下网址下载:https ://github.com/rs/SDWebImage
关于内存警告,这不仅是由于您的应用程序,还因为在后台运行的所有应用程序有效地使用了内存,因此请尝试停止后台运行的应用程序。