2

静止画像の上にアニメーションを表示できるようにする必要があります。

MPMoviePlayerでは便利なものを制御できないため、これを行うために私が考える唯一の方法は、複数の静止画像を使用して、それらを1つずつ表示して「映画のような」アニメーションを作成することです。

UIImageViewを使用してこれを行うことができることは知っていますが(UIImageViewのanimationImagesプロパティを設定してからstartAnimationを呼び出すことにより)、アニメーションには100を超える画像が含まれるため、メモリ使用量が最大になります。

誰かがこの種のアニメーションを行うための良い方法を持っていますか?Core AnimationまたはOpenGLを使用していますか?

私の推測では、画像バッファを作成する必要があり、新しい画像を読み込むときに、画像バッファから画像を表示しますか?

4

4 に答える 4

6

Core Animation CALayer を使用してアニメーションをホストし、一連の CALayer をそのメイン レイヤーの内外で交換して、フレームごとのアニメーションを実行できます。content プロパティを使用して、イメージ フレームをホストする CALayer のコンテンツを CGImageRef に設定できます。画像を含む一連の CALayer を作成して、必要に応じて NSMutableArray に保存し、完了したら削除して、メモリの使用を最小限に抑えることができます。

次のように CATransaction で replaceSublayer:with: メソッド呼び出しをラップすることにより、フレーム間のトランジション期間を設定できます。

[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:0.25f] // 1/4th of a second per frame
                 forKey:kCATransactionAnimationDuration];   
[mainLayer replaceSublayer:[imageLayers objectAtIndex:oldImageIndex] with:[imageLayers objectAtIndex:newImageIndex]];
[CATransaction commit];

フレームの表示時間が十分に短い場合は、メイン レイヤーのコンテンツで CGImageRef をスワップ インおよびスワップ アウトすることで回避できる場合もあります。

于 2009-01-15T16:46:53.500 に答える
1

お気づきのように、UIImageView.animationImages を使用すると、システム メモリがすべて使用され、アプリがクラッシュするため、機能しません。タイマーを使用して、タイマーが起動するたびに UIImageView のイメージ プロパティを設定できます。コンテンツとして使用する UIImage オブジェクトは、タイマーが起動するたびにロードする必要があります。UIImageViewの代わりにCALayerを使用することを除いて、これは基本的に他の回答で説明されているアプローチと同じです。タイマーが起動するたびに画像を読み込んで画像の内容を変更するのは問題ありませんが、iPhone で全画面画像の場合、約 11 FPS しか得られません。

UIImageView 切り替えロジックを実装する実際の例を使用したい場合は、このPNG アニメーションサンプル プロジェクトを xcode 用にダウンロードしてください。また、同じ種類の機能の最適化されたバージョンであるAVAnimatorライブラリも提供します。これは、Quicktime アニメーションと APNG 形式、および圧縮をサポートします。

于 2011-05-20T20:44:07.200 に答える
0

画像を順番にアニメーション化するには、

まず、再生する必要がある画像の配列を取得します。

次に、この配列をアニメーションに渡して完了です。

Iphone でよく説明するアニメーション: 一連の画像

于 2012-10-20T04:51:07.137 に答える