1

ユーザーが行った選択に基づいてロードおよびアニメーション化するアニメーションの複数の配列を持つ2つのUImageViewを実行しようとしています。たとえば、次の1つの方法があります。

-(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.

このメッセージを受け取った後、ロードされた新しいアニメーションはアプリをクラッシュさせます。Instrumentsを実行しましたが、リークを見つけることができませんでした。クラッシュしても出力は何も表示されません。

ここにメモリの問題はありますか?どうすればこの問題を取り除くことができますか?ありがとう。

4

1 に答える 1

0

いくつかのアイデア:

1)配列に複数のアニメーションをロードしないでください。1つのアニメーションを停止し、別のアニメーションを開始する準備ができたら、最初のアニメーションを削除し、視聴者に表示される画像を、表示されているはずの単一の画像に置き換えます。表示されていた正確な画像を特定できる場合(そしてこれに疑問がある場合)、配列を単一の画像に置き換えることができ、画像はちらつきません。

2)1)ができない場合は、Core Animationを直接使用してみて(作業量が増えます)、自分でアニメーションを作成してください。これにより、メモリ使用量をより細かく制御できます(ファイルシステムに画像ビットマップをキャッシュできます)。

3)MacとAVFoundationまたはQTKitを使用して、画像からアニメーションを作成し、画像シーケンスの代わりに開始および停止する「ムービー」を作成します。この場合、バンドル内の静止画像をムービーオブジェクトに置き換えます。

于 2013-03-16T20:28:15.357 に答える