画像シーケンスをアニメーション化するより高性能な方法はありますか?
-
10-07-2019 - |
質問
これは邪悪なコードだと思う:
CGRect iRect = CGRectMake(0.0f, 0.0f, 320.0f, 400.0f);
UIImageView *imgView = [[UIImageView alloc] initWithFrame:iRect];
imgView.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"b0001.png"],
[UIImage imageNamed:@"b0002.png"],
// 150 more
[UIImage imageNamed:@"b0152.png"],
nil];
imageNamed:は悪であることを少し覚えています。このようにして、UIImageオブジェクトを提供する 場合、それらのUIImageオブジェクトはすぐにそれらの画像ファイルをメモリにロードしますか?そして、それ以外に、それらの152個のチャンキーUIImageオブジェクトはすべて、自動リリースされるため、メモリを大幅に破壊しますよね
したがって、結論として、この手法を使用するのは面倒です。しますか?知りません。私の古い第1世代iPod touchでは、これは25 fpsで遅れなく実行されるようです。とても滑らかでいい。私が恐れている唯一のことは、他のデバイスがこれについて異なると考えるかもしれないということです。私は利用可能な最も弱いプログラマブルipod touchを持っていますが。
とにかく、そこに改善の可能性があると思いますか?または、それを使用して、UIImageViewのsetImage:を、自動リリースなしで、そのチャンキーなimageWithContentsOfFileを使用して遅延セレクターでそれらの画像をロードおよび設定するUIImageViewのsetImage:を使用するべきではありませんか?たぶん、賢い人が、画像シーケンスで構成される高性能サムvidの小さなライブラリを書いたのでしょうか?
(いいえ、ビデオはiPhoneのオプションではありません。このためのAppleフレームワークはフルスクリーンをサポートしているだけで、それを行う他のことは知りません)
解決
UIImageView配列に非常に多くの画像をロードしようとすることは避けたいです。同様の質問は、こちらでした。ここで説明するバッファリング方法は、状況にも当てはまります。
他のヒント
imageNamedについてあなたは正しいです...多くの場合、画像を内部的にキャッシュするため、使用しないでください。使用:
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image1" ofType:@"png"];
imageNamedを使用するのは、次の場合のみです
1)アイコンを何度も再利用しています(tableviewsなど...)
2)独自のキャッシュシステム