2013-03-16 103 views
1

我試圖運行兩個UImageViews有多個動畫數組,他們根據用戶的選擇加載和動畫。例如,下面是一個方法:iOS - UIImageView動畫接收內存警告

-(void)initiateAnimations { 

nullAnimation = [NSArray arrayWithObjects: 

      [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0002" ofType:@"png"]], 
      [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0003" ofType:@"png"]], 
      [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0004" ofType:@"png"]], 
      [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0005" ofType:@"png"]], 
      [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0006" ofType:@"png"]], 
      [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0007" ofType:@"png"]], 
      [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0008" ofType:@"png"]], 
      [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0009" ofType:@"png"]], 
      [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0010" ofType:@"png"]], nil]; 
} 

這裏是一個IBAction調用動畫製作方法:

-(IBAction)nullani { 
player.animationImages = nullAnimation; 
player.animationDuration = 0.50; 
player.animationRepeatCount = 1; 
[player startAnimating]; 
} 

這一切運作良好,在第一,但請記住,我有大約5-6其他大致具有相同尺寸圖像的動畫數組。他們不是很大,範圍從12-80k.png文件。我收到此消息,任何新的動畫加載會崩潰的應用程序後

2013-03-16 01:34:44.438 [3316:907] Received memory warning.

:當我嘗試了幾次後,動畫,我在輸出recieving此錯誤。 我通過Instruments運行它,無法找到任何泄漏,並且輸出在崩潰時不會給我帶來任何影響。

這裏是否有任何內存問題?我如何擺脫這個問題?謝謝。

+1

圖像有多大?磁盤上的大小不能以kb爲單位,如.png文件。像素?請記住,要顯示圖像,他們需要解壓縮,所以它可能沒有太多關於12-80k大小。這些全屏圖像? – Nate 2013-03-16 08:50:42

+0

請記住,泄漏的內存不是您內存不足的唯一方法。你可以使用太多。儀器告訴你有關內存使用情況的內容?每次啓動動畫時,您使用了多少個字節? – jrturton 2013-03-16 08:55:40

+0

@Nate正常大小是800x800,視網膜1600x1600。它大部分是空白的,主要內容大約是75x400,因爲我有動畫增長/縮小/擴展。 800x800就像一個舞臺。 – nworksdev 2013-03-16 08:57:02

回答

0

一些想法:

1)從不超過1個動畫加載到陣列。一旦您停止一個動畫並準備好開始另一個動畫,請刪除第一個動畫,並將查看器看到的圖像替換爲應顯示的單個圖像。如果您可以確定顯示的確切圖像(並且懷疑這一點),那麼您可以用單個圖像替換該陣列,並且圖像不會閃爍。 2)如果你不能做1),那麼直接嘗試使用核心動畫(爲你更多的工作),並自己做動畫。這使您可以更好地控制內存使用情況(可以在文件系統上緩存圖像位圖)。

3)使用Mac和AVFoundation或QTKit,從圖像製作動畫,然後創建一個「電影」,您可以開始和停止,而不是圖像序列。在這種情況下,您可以用電影對象替換包中的靜態圖像。

+0

請先生@nworksdev ..你還沒有接受..任何「stackoverflow的」答案.. :( – TonyMkenu 2013-03-29 09:37:49