2015-08-13 73 views
0

我遇到了一個優化問題。我有一個在屏幕上同時顯示大量圖像(高達150)。這些圖像顯示爲如果它是一個可以滾動的球體。 galaxy優化大量的UIImageView

到目前爲止,它在一個新設備上運行60 fps,但有一些微小滯後,我不知道是什麼原因。探查器告訴我59-60 fps,但問題是,丟失的fps是可見的,並像微型摔倒一樣下跌。 如果我大幅減少了imageViews的數量,這個問題就消失了。 它似乎不受gpu限制,因爲我在gpu的大部分地方使用了30%的東西,但cpu從未超過50%。

什麼可能導致/如何檢測到這種微滯後的原因? (該圖像使用contentOfFile編輯) 知道至少有一半圖像不在屏幕上(球體的另一側),提高性能的最佳解決方案是什麼?

-Recycle UIImageViews的

- 設置不顯示的ImageView隱藏(這是我在做什麼現在)

- 使用光柵化層(但由於尺寸每次變化,它會重新渲染,對不對?)

- 另一個我不知道的魔法解決方案。

如果你想嘗試的應用程序: https://itunes.apple.com/us/app/oolala-instant-hangout-app/id972713282?mt=8

回答

0

1)這些形狀的創建方法也很重要。做到這一點的最高性能方式(我知道的)將是預渲染帶有alpha通道的圖像。

2)還有一個 「經典」 JPEG decompression problem

3),我們使用的CALayer直接呈現在〜一個UIScrollView 300個圖像iPhone 4S的屏幕上無掉幀。可以試試看。

_layer = [CALayer new]; 
_layer.contents = (id)_image.CGImage; 
_layer.opaque = _opaque; 
_layer.contentsScale = [UIScreen mainScreen].scale; 

那是很久以前的事,並用在iOS 5,除非你有一個快速的方法來測試它你或許應該忽略這個建議。

+0

正如你所說,它已經被預渲染,比添加一個蒙版更好。我會嘗試。你的方法比UIImageView有更好的性能嗎?如果是這樣,我不知道爲什麼。 – Naluh

+0

>您的方法比UIImageView的性能更好嗎? – kean

+0

我已更新我的問題。 CALayer被用來提高NIAttributedLabel的性能。它比CGContextDrawImage提供了巨大的性能提升。現在我開始懷疑它是否比UIImageView更快,但我相信我們也測試了UIImageView。 – kean