2012-01-15 63 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

相關問題