2011-11-13 54 views
4

如何在iOS中執行動畫以消耗大量內存(或高效),因爲我目前面臨崩潰問題?如何在iOS中高效地使用圖像動畫

對於單個動畫我有一個100個圖像的序列,每個圖像大約40kb;像這樣大約有7個動畫共計近700個圖像。

例如,在這裏我已經展示了一個帶有2個圖像的示例動畫。這是我當前的動畫代碼。

/*First taking two images into an Array*/ 
NSArray *imageArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"img1"],[UIImage imageNamed:@"img2"],nil]; 
/*Creating an image view as a layer for performing the animation */ 
imgView = [UIImageView alloc]; 
[imgView initWithFrame:CGRectMake(110,245,100,100)]; 
/*Setting the images for performing animations*/ 
imgView.animationImages = imageArray; 
imgView.animationDuration = 8.5 ;//delay for performing the animation 
imgView.animationRepeatCount = 1; 
/* ..and finally adding the animation to the current view */ 
[self.view addSubview:imgView]; 
[imgView startAnimating]; 
[imgView release]; 
[imgView stopAnimating]; 
imageArray = nil; 
[imageArray release]; 

任何人都可以提出任何改進代碼,以便動畫可以高效地完成或有類似OpenGL或核心動畫任何其他選擇,如果這樣任何人都可以提出一個示例代碼這樣做。

回答

3

我的建議是使用Cocos2d,這是一個基於專門爲遊戲設計的Open GL的框架。

在你的情況,你會得到的好處是:

  1. 使用紋理地圖,而不是單獨的圖像保存儘可能多的內存成爲可能;

  2. 使用PVR格式爲您的圖像(與PNG); PVR是iPhone/iPad圖形芯片的原生格式,它可以節省更多的內存;

  3. 您也可以嘗試使用較小的佔位面積格式爲您的圖像(即RGB565而不是RGB8888,每像素16位而不是32)。

如果您認爲這可能爲你工作,看看this tutorial

您可以直接使用Open GL或Core Animation來做同樣的事情,但我認爲最好讓Cocos2d處理低級別的東西。

對於基於核心動畫的教程做同樣的事情,看看this post。正如你將會看到的那樣,你將實現幾個類來處理Cocos2d已經提供給你的東西(以及許多其他功能)。

+0

請問您可以使用Core Animation或OpenGL來推薦相同的代碼 – prajul

+2

看看這個:http://mysterycoconut.com/blog/2011/01/cag1/ – sergio

+0

40Kb x 100 =巨大的精靈表。 ..你將無法使用它的圖層內容。 – debleek63

2

上面的mysterycoconut鏈接是一個不錯的選擇,因爲它避免了「使用Cocos2D」反射帖子,當人們詢問關於SO的CoreGraphics動畫相關問題時總會出現這種帖子。您遇到的問題的根源是一個思路不清的animationImages API,它消耗了太多的應用程序內存,不應該被使用。您可以在Video and Memory usage on iOS devices處閱讀有關該問題的詳細說明。那裏描述了我自己解決問題的方法。基本上,您想要將圖像數據解壓縮到文件,然後將內容粘貼到圖形卡中。這在iOS下非常快,CoreGraphics利用圖形卡級別的優化紋理邏輯來限制緩衝區副本,以便設備CPU使用非常少。通過這種方法,可以獲得數百張圖像的非常快速的動畫(45至60 FPS),而無需僅使用CoreGraphics來全部使用應用程序內存。