2011-11-25 215 views
7

也許我會問這問了其他人同樣的問題(但它沒有響應):
Speed up first UIImageView animation (force cache the images)

但是,我的短期問題是:
我有資源60張圖片,在一個時間間隔循環我'm要爲該圖像設置動畫,每次設置爲UIImageView.image圖片來自資源。

問題是:第一個動畫不好!當我在同一個UIImageView中再次循環所有圖像時,動畫是完美的。我們可以預先在UIImageView中緩存圖像嗎?

編輯:或者,也許我們可以做一些技巧,使動畫順利?是否UIImageView緩存圖像?

回答

17

方法 [UIImage imageNamed:@""] 高速緩存中的圖像。 UIImageView不。由於內存不足,我的應用程序出現大量圖像崩潰的問題。 修復如果我更改爲[UIImage imageWithContentsOfFile:@""]不緩存圖像。

要預先緩存圖像,您只需在init方法中調用[UIImage imageNamed:@""]來獲取所需的所有圖像。但是,如果您收到內存警告圖像將被釋放。

+0

也許,但我們在談論UIImageView,而不是UIImage – beryllium

+0

對不起。修復了答案。 –

+0

是的!在使用'imageNamed'分析應用程序的過程中,我的應用程序佔用了120MB的內存,使用'imageWithContentsOfFile'時的內存爲15MB。但不幸的是,它並沒有解決不好的動畫問題( –

2

不,UIImageView不會緩存圖像。 image屬性聲明爲保留,所以當你設置新的圖像,然後imageView發送release消息到舊圖像和retain到新的。

動畫的UIImageView最簡單的方法是將圖像的陣列設置爲屬性animationImages並調用startAnimating方法

imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.png"], ..., nil]; 
imageView.animationDuration = 2.0f; 
[imageView startAnimating]; 
+0

但是,你有沒有試過使用UIImageView.animationImages動畫100張圖像,每張圖像都是850x535大小?我試過了,應用程序因爲內存而崩潰。我認爲的原因是,因爲animationImages包含所有圖像,這些圖像很多。或者,我說錯了什麼?如果是這樣,請糾正我。 Thx –

+0

是的,我想你完全正確。這種方式最簡單,但效率不高,如你所見。 – beryllium

+0

你認爲,我應該使用一些圖形庫來播放大圖像,保持性能良好嗎?你知道任何? Thx –

4

UIImageView不緩存圖像,因爲[UIImage imageNamed:@""]。不幸的是,如果你有很多圖像,imageNamed會使應用程序崩潰,因爲它的內存不足。

您可以使用[UIImage imageWithContensOfFile:@""]預加載NSArray中的所有圖像。 一旦你有了陣列,你就可以做你想做的!

+1

我認爲這很奇怪!.. NSArray還會保留圖像內部的記憶,以及imageNamed緩存的圖像。要麼? –