【问题标题】:Memory consumption while loading a large image in uiimageview in在uiimageview中加载大图像时的内存消耗
【发布时间】:2011-05-24 12:46:33
【问题描述】:

我正在使用 UIViewContentModeScaleAspectFit 将大小为 2480 × 3508 的 UIImage 加载到 UIImageView 中。我在加载此图像时收到内存警告。在我在这个 UIImageView 中加载了一些这种大小的图像之后,应用程序崩溃了。有什么方法可以解决这个问题。

【问题讨论】:

  • 您可以在添加到 imageView 之前缩放图像

标签: iphone ipad uiimageview uiimage


【解决方案1】:

此问题的解决方案包括加载图像的缩放版本 (*1),或者您可以选择在 CATiledLayer(*2) 的帮助下以全分辨率显示它。

  1. [UIImage imageWithCGImage:scale:orientation:];
  2. CATiledLayer example

附录:如果您的图片来源是图片库,ALASSet 提供已缩放的图片到全屏和全分辨率图片。您可以将两者与 CATiledLayer 结合使用。当您等待 CATiledLayer 中的图块加载时,将全屏图像添加到 CATiledLayer 下方的图层中作为占位符。

【讨论】:

    【解决方案2】:

    好吧,根据文档:

    您应该避免创建尺寸大于 1024 x 1024 的 UIImage 对象。

    缩小图像然后将其加载到 ImageView 中,有很多库可以做到这一点,这里有一个:

    https://github.com/Nyx0uf/NYXImagesUtilities

    【讨论】:

    • 是的,这是真的,你可以计算出内存使用量:2480 × 3508 * 4 = 34799360字节的内存。
    • 我使用的是滚动视图,而 uiimageview 是 uiscrollview 的子视图。因此,如果我减小图像大小,则图像在缩放时会变得模糊
    • 在这种情况下,你应该看看 CATiledLayer :olivetoast.com/blog/2009/08/…
    • k.这是一个不错的选择。使用这个巨大的图像后,我将 UIImage.image 属性设置为 nil。不要释放用于加载前一个大图像的内存。
    【解决方案3】:

    您可以使用它进行缩放 该方法在以下链接中进行了简单的描述:

    How to scale a UIImageView proportionally?

    【讨论】:

      猜你喜欢
      • 2018-11-07
      • 1970-01-01
      • 2016-05-12
      • 2011-11-29
      • 1970-01-01
      • 2012-11-01
      • 2019-01-03
      • 1970-01-01
      • 2011-08-04
      相关资源
      最近更新 更多