2011-03-08 39 views
0

我已經創建了一個項目。 並且有三組圖像需要顯示,每組有5個圖像。 在應用程序中,圖像將每0.2秒更換一次。 ,圖片大小隻有30 * 30,所以屏幕上大概有80張圖片,都是動畫。 但是當我測試這個時,我覺得fps似乎變成了0.8秒,非常慢。關於fps的問題

所有的圖像都繪製在一個UIView。我在方法 - (void)drawRect中使用[image drawInRect:]。 因此,我有什麼建議讓fps更快?

回答

0

你有沒有試圖把80個UIImageView S上的屏幕上?如果您只在需要的時候在每個圖片上設置新圖片,則應該會看到改進。

原因是每個UIView都有它自己的CALayer,它在需要時被複制到圖形內存。在一個像素上覆制非常緩慢(但是一旦它在那裏被緩存),所以如果您一次只更新一個30x30的磁貼,您應該看到比不斷更新屏幕更好的性能。

你當然可以手動管理80個CALayers單一的UIView內,但是這將是比使用80個UIImageView很難能用。

任何時候你重寫-(void)drawRect你很可能會影響性能很多,因爲路CALayers與顯存互動。 iPhone的Quartz圖形系統針對具有大量靜態圖層進行了優化,然後可以使用圖形命令(變換,不透明等)進行操作。

+0

不,我不使用UIImageView。我只是使用drawRect方法在UIView中繪製所有圖像。沒有任何其他的UIViews。總的圖像不只是80。這可能遠不止這個數字,80是一個UIView中的最大值。 – toad 2011-03-08 11:48:25

+0

我知道你不知道,我建議你試試看 – 2011-03-08 17:28:01

0

簡介。使用Instruments應用程序查找代碼中哪部分運行速度最慢,然後查看您是否可以加速或避免頻繁調用它。例如:你是否真的需要重新繪製所有的圖像?你可以使用Core Animation或OpenGL ES來替換一些Cocoa Touch代碼嗎?

迭代。一旦你做了一個調整,重新輪廓。它變得更好了嗎?如果確實如此,那麼尋找下一步加速。如果沒有,請決定它是完全有用還是應該恢復。

0

很好,每次你畫的東西......這是一個工作......你也許可以得到更好的表現剛剛開始加載所有的圖像,然後只要將他們在屏幕上(與隱藏/顯示您的UIImageView)如果圖像太小,你將不會有內存問題...