2013-01-24 39 views
0

我在動畫序列中使用了150張圖像。在UIImageView中動畫圖像需要太多內存

這是我的代碼。你可以使用NSMutableArray * arrImages = [[NSMutableArray alloc] initWithCapacity:0];

for(int i = 0; i <=158; i++) 
{ 
    UIImage* image = [UIImage imageNamed:[NSString stringWithFormat:@"baby%05d.jpg",i]]; 
    [arrImages addObject:image]; 
} 

babyimage.animationImages = arrImages; 
[arrImages release]; 

babyimage.animationDuration = 6.15; [babyimage startAnimating];

但它佔用的內存太多。播放1分鐘後,它會在控制檯中顯示內存警告。然後墜毀,我也降低了圖像分辨率,而且我無法將其降低到150以下,以獲得更好的質量。

有沒有更好的方法來做這個動畫沒有內存問題。 非常感謝 plz幫助...

回答

3

嘗試,

而不是[UIImage imageNamed:[NSString stringWithFormat:@"baby%05d.jpg",i]]

使用

[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"baby%05d.jpg",i] ofType:nil]] 

原因是imageNames緩存圖像不放手,直到它釋放內存警告

希望它可以幫助你..

編輯: -

另外,不要將整個圖像存儲到數組中,只要保存圖像的名稱,如果你想或不保存任何東西。這也將佔用大量內存

+0

這不會真的有幫助,因爲150張圖像仍然需要一次加載到內存中......它們沒有被緩存,但它們仍然被'arrImages'保留,因此它們不會被釋放... – sergio

+0

@sergio我在我的應用程序中也具有相同的功能,通過這種方式,我的應用程序崩潰不再發生。我正在循環運行250個圖像,每個圖像的大小几乎爲250 kb .. –

+0

@ P.J感謝您的回覆。我已經嘗試過,但加載所有圖片需要花費太多時間.BTW非常感謝。 –

0

我不知道什麼動畫是你沒有指定它。但是如果我在做代碼,我會遵循以下算法。

這是假設在特定時間只顯示一個圖像,但在過渡期間,您將最終以某種方式進行兩次卷積。

procedureAnimate: 
    photo_1 = allocate(file_address_array[i++]) 
    while i < MAX_PHOTOS 
     photo_2 = allocate(file_address_array[i++]) 
     photo_3 = allocate(file_address_array[i++]) 
     perform_animation(photo_1, photo_2) 
     release(photo_1) 
     photo_1 = photo_2 
     photo_2 = photo_3 
    release(last_two) 

我不確定這是否是完成這樣的事情的完美途徑。但這會更有效率。

(可能是在alloc/release登錄時出現嚴重錯誤,但這與我在早上5點04分工作時一致)。讓我知道如果這不起作用。