2009-06-14 10 views
4

私は約3週間、iphoneプラットフォームのために開発してきました。私は1000×1000のPNG画像(透過性を持つ)でフレームアニメーションをフレームに設定しようとしています。私は、これは、シミュレータで罰金働いた今、このiPhone SDKのフレームアニメーション技術による最も簡単なフレームは何ですか?

-(IBAction)startClick1:(id)sender { cloud.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed: @"g0000.png"], [UIImage imageNamed: @"g0001.png"], [UIImage imageNamed: @"g0002.png"], [UIImage imageNamed: @"g0003.png"], [UIImage imageNamed: @"g0004.png"],

などのすべての画像をアニメーション化するimageNamedを使用してみましたが、それは、デバイスに来たとき、それは最初に知られているから、おそらく、アニメーションをしようとしたとき、デバイスは、単に再起動しますメモリの問題がimageNamedであるため、いくつかの調査をした後、imageWithContentsOfFileが画像をキャッシュしないようになっていることがわかりました。アニメーションが再生されるように要求されたときに、このような何かに私のコードを変更:

- (IBAction)startClick:(id)sender { gordon.animationImages = [NSArray arrayWithObjects: [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"g0001.png" ofType:nil] ], [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"g0002.png" ofType:nil] ], [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"ge0003.png" ofType:nil] ], [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"g0004.png" ofType:nil] ], [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"g0005.png" ofType:nil] ], [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"g0006.png" ofType:nil] ],

今は、このシミュレータでバギーを実行し、imageNamed方法がやったのと同じ方法で、デバイス上では動作しません。したがって、デバイス上で正常に動作する一連のイメージをアニメーション化する最も簡単で簡単な方法は何ですか?ああ、私がこのプラットフォームに慣れていないことを覚えている時に答える。

+0

関連:http://stackoverflow.com/questions/2734669/iphone-dev-animating-png-sequences – cregox

答えて

0

私は400x400の3つの透明なレイヤーを取得する問題を抱えていました。 iphoneで、そのサイズの画像を16枚取得できるわけではありません。レンダリングを24秒ごとに呼び出し、レンダリングをサーフェス上に設定します。

+0

また、シミュレータはデバイスと比べてレンダリングが素晴らしいです。シミュレータが何かを処理できるからといって、デバイスができることを意味するわけではありません。 まず、電話で1枚の画像を取得し、次に必要に応じて配列を増やしてください。 –

3

imageNamed:とimageWithContentsOfFileの主な違いは、imageNamedは事前圧縮解除された画像を返します。

this answerを見て、画像をキャッシュしなくても、独自の「最適化」バージョンを作成できます。

今、1000x1000の画像を読み込んでいますが、画面サイズは320x480です。画像を縮小したり、トリミングしたりしていますか?縮小している場合は、画像をプリスケールすることを検討してください。また、あなたのアニメーションは30fpsになっていますか、それともスライドショーアニメーションに似ていますか?

最後に、オンデマンドでアニメーションのフレームを読み込むことをお勧めします。ご覧のとおり、1000x1000の画像は、最適化された状態を維持するにはあまりにも多くのメモリを占有します。メモリを一度に1つだけ保持すると、クラッシュすることはありませんが、コードの中断については非常に注意する必要があります。スライドショー「ken burns」タイプエフェクトを実行している場合は、スライドの持続時間中に1つの画像を描画用にあらかじめ最適化(圧縮解除)することができます。

30fpsの場合は、画像サイズを小さくして速度を上げる必要があります。

+0

私は約15fpsでアニメーションしようとしています。アニメーション化しているビューはtouchesMovedで移動可能です。そのため、アニメーションは画面のサイズにはなりません。ユーザーがビューを横にドラッグし、ユーザーにはアニメーションのコーナーが表示され、一般的にはプロフェッショナルではありません。大型アニメーションをiPhoneに取り込む別の方法はありますか?透明なビデオを読み込むのと同じですか? –

+0

1000x1000イメージをタイルに切断して、必要なイメージのみを読み込むことができます。たとえば、200x200のイメージに分割すると、読み込まれるピクセルの量が削減されます。私の知る限り、透明なビデオを公開するAPIは公開されていません。 – NilObject

+0

さて、あなたはそれがどういう意味なのかよく分かりません。 –

1

アップルは、デバイスの代わりにイメージプログラムのサイズを変更するためにイメージプログラムを常に使用することを推奨しています。これにはかなりの処理能力が必要です。それは、1秒以内に24枚の画像をサイズ変更する、大きな減速である可能性があります。

+0

私は理解していますが、デバイスでサイズを変更していないため、必要なサイズであるため、1000x1000の画像は画面のサイズに合わせてサイズ変更されません。しかし、とにかく、今私は、iPhoneの画面の大きさをアニメーション化しています。それは大規模に役立ちましたが、私のアニメーションの最初の数フレームは欠けていて、ユーザーがアニメーションを開始するボタンを押すと何かがキャッシュされ、紛失してリリースされないので、ユーザーが自分のアプリでそのボタンを押し続けると、デバイスが再起動するか、アプリが終了します。 –

0

私はうまく動作します。このコードを使用 -

に(SO私は正確にリンクを追加できないだろう)それを「PNGアニメーション」を検索する - www.mode(ここではスペースなし)jong.com/iPhone/を事前にではなく、必要に応じてPNGファイルをロードします。

これはメモリの問題を解決します(1000x1000フレームを使用することもできます)。しかし、まだディスクスペースの問題があります。このプログラムは、大規模な/多数のアニメーションのために巨大になります。

HTH、

Oded。

関連する問題