2011-11-13 20 views
4

現在、クラッシュの問題に直面しているため、メモリを大量に消費することなく(または効率的に)iOSでアニメーションを行うにはどうすればよいですか?iOSで画像を効率的に使用する方法

私は100枚の画像のシーケンスを持っており、各画像は約40kbです。そのように、約700枚の画像を合計した約7枚のアニメーションがあります。

たとえば、ここでは2つの画像を含むサンプルアニメーションを示しました。これは私の現在のアニメーションコードです。アニメーションを効率的に行うまたはOpenGLまたはCore Animationのような任意の他の代替があることができるように、そう、誰もがそうするサンプルコードを提案することができるかどう

/*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]; 

は誰もが、コード内の任意の改善を提案することができます。

答えて

3

私の提案は、ゲーム向けに特別に設計されたOpen GLベースのフレームワークであるCocos2dを使用しています。あなたのケースでは

、あなたはなるだろうな利点は以下のとおりです。

  1. できるだけ多くのメモリを節約するためにテクスチャアトラスの代わりに、個々の画像を使用しました。

  2. あなたの画像にPVR形式(対PNG)を使用します。 PVRは、iPhone/iPadグラフィックチップのネイティブフォーマットであり、より多くのメモリを節約できます。

  3. さらに小さいフットプリントフォーマット(RGB8888の代わりにRGB565,32ビットではなく16ビット)を使用することもできます。

あなたはこれがあなたのために働く可能性が考えられる場合は、this tutorialを見ています。

Open GLやCore Animationを使っても同じことができますが、Cocos2dが低レベルのものを扱うほうが良いと思います。

同じことを行うCore Animationベースのチュートリアルについては、this postをご覧ください。ご覧のように、Cocos2dが既に提供していること(他の多くの機能とともに)を行うためのいくつかのクラスを実装します。

+0

コアアニメーションまたはOpenGLを使用して同じコードを実行することをお勧めしますか? – prajul

+2

これを見てください:http://mysterycoconut.com/blog/2011/01/cag1/ – sergio

+0

40Kb x 100 =巨大なスプライトシート。あなたはそれをレイヤのコンテンツに使用することはできません。 – debleek63

2

上記のミステリーココナッツリンクは、CoreGraphicsのアニメーション関連の質問をSOに尋ねたときに常に現れるように見える「Cocos2D」反射ポストを避けるため、いいです。あなたが実行している問題の根源は、あまりにも多くのアプリメモリを消費し、決して使用すべきではない、よく考えられていないanimationImages APIです。問題の詳細な説明はVideo and Memory usage on iOS devicesで読むことができます。問題に対する私自身の解決策がそこに記述されています。基本的には、イメージデータをファイルに解凍して、その内容をグラフィックスカードにblitしたいとします。これはiOSの下では非常に速く、CoreGraphicsはデバイスのCPUがほとんど使用されないようにバッファコピーを制限するグラフィックスカードレベルで最適化されたテクスチャロジックを使用します。このアプローチでは、CoreGraphicsのみを使用してすべてのアプリケーションメモリを使い果すことなく、数百の画像の非常に高速なアニメーション(45〜60FPS)を得ることができます。

関連する問題