2012-01-15 21 views
2


几个月前我从苹果网站上找到了一个非常棒的示例代码。这个示例被称为“LargeImageDownsizing”,奇妙的是它解释了很多关于如何从资源中读取图像然后在屏幕上呈现。
挖掘该代码我发现了一些让我感到不安的东西。尺寸缩小的图像被传递到具有CATiledLayer的视图,但是不会在每个图块上提供一张图片来提高内存性能,只需设置图块大小然后加载图像(我可以简单地转到概念)。
所以我的问题基本上是为什么?为什么使用CATiledLayer,如果它没有以正确的方式喂食,他们可以使用正常的UIImageView ...
因此,我做了很少的测试,以了解我是否正确。修改代码简单地添加一个带有图像视图的滚动视图作为子视图并响应委托滚动视图进行缩放。我去这些结论对测试设备和SIM:
CATiledLayer和UIImageView它们之间有什么大不了的?

  1. -The内存的影响和占用是完全一样的,即使在变焦滚动操作,并没有我的人吃惊的是,图像在内存中解压缩
  2. - 时间曲线说一个tileview需要更多的时间滚动缩放操作,而不是一个UIImageView过程中引出,并不会在所有再UIImageView的已绘制
  3. - 如果我送内存警告让我惊讶两种解决方案之间没有任何变化(仅适用于SIM卡)
  4. -Testing核心动画性能我避开60FPS
    相同的结果

那么是什么这两个视图/层之间的交易我为什么要选一个,而不是其他的这些特殊情况? UIImageView似乎赢得了这场战斗。

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

回答

0

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

但是...

CATiledLayer的一点是,放大到一个非常非常大的图像时,你并不需要提请所有的瓷砖,尤其是。知道哪些部件实际需要是明智的。它也是聪明的驱逐不再需要的瓷砖。

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

+0

谢谢,为了清晰起见,缩放图像是1555px宽度,2236px高度。你的解释确实有道理。 – Andrea 2012-01-15 18:22:11

相关问题