2


几个月前,我从 Apple 网站上发现了一个非常棒的示例代码。该示例称为“LargeImageDownsizing”,奇妙的是它解释了很多关于如何从资源中读取图像然后在屏幕上呈现的信息。
深入研究该代码,我发现了一些让我有些不安的东西。缩小的图像被传递给具有 CATiledLayer 的视图,但没有在每个图块上提供一块图像以提高内存性能,它只是设置图块大小然后加载图像(我让事情变得简单,以了解概念)。
所以我的问题基本上是为什么?如果 CATiledLayer 没有以正确的方式提供,为什么要使用它,他们本可以使用普通的 UIImageView ......
所以我做了一些测试来了解我是否正确。修改代码简单地添加一个带有图像视图的滚动视图作为子视图并响应委托滚动视图进行缩放。我在设备和 sim 上进行了这些结论测试:

  1. - 对内存的影响和占用是完全一样的,即使在缩放滚动操作过程中,我一点也不惊讶,图像是在内存中解压的
  2. - 时间配置文件说,在滚动缩放操作期间绘制 tileview 而不是 uiimageview 需要更多时间,这并不让我感到惊讶 uiimageview 已经绘制
  3. - 如果我发送内存警告,两种解决方案之间没有任何变化(仅在 sim 上)
  4. - 测试核心动画性能我在 60FPS 左右得到相同的结果

那么这两个视图/层之间有什么关系,为什么在这些特定情况下我应该选择一个而不是另一个呢?UIImageView 似乎赢得了这场战斗。

我希望有人可以帮助我理解这一点。

4

1 回答 1

0

它们可能对小图像执行相同的操作,因为在操作系统性能方面的唯一区别是 CATiledLayer 在后台线程上绘制。根据瓦片大小,CATiledLayer 甚至会更慢,因为它必须为一张图像绘制多个瓦片。

但 ...

CATiledLayer 的要点是您不需要绘制所有图块,尤其是在放大非常非常大的图像时。知道实际需要哪些部件是明智的。驱逐不再需要的瓷砖也很聪明。

或者,要使这种机制起作用,您需要分别提供图像的各个部分。我们正在谈论可能无法在未压缩的内存中保存的图像的总大小。

于 2012-01-15T15:20:07.283 回答