2011-11-25 10 views
7

は、おそらく私は他の人に頼まれたのと同じ質問をするつもりだ(しかし、それは何の応答がありません):
Speed up first UIImageView animation (force cache the images)

しかし、私の短い質問です:私はリソースで60枚の画像を持って
、時間間隔ループIでのその画像をアニメーション化し、毎回に設定します。UIImageView.imagen'th image from resouce。

問題は最初のアニメーションが悪いです!同じUIImageViewですべての画像を再びループすると、アニメーションは完璧です。 UIImageViewで画像をキャッシュすることはできますか?

編集:アニメーションを滑らかにするために、いくつかのトリックを作ることができますか?UIImageViewはイメージをキャッシュしますか?

答えて

17

を呼び出すことで画像をキャッシュします。 UIImageViewはありません。メモリ不足のためにクラッシュしていた画像がたくさんあるアプリで問題が発生しました。 画像をキャッシュしない[UIImage imageWithContentsOfFile:@""]に変更した場合に修正します。

イメージをプリキャッシュするには、initメソッドで必要なすべてのイメージに対して[UIImage imageNamed:@""]と呼んでください。しかし、メモリ警告が表示された場合、イメージの割り当てが解除されます。

+0

たぶん、私たちはUIImageViewについてではなく、UIImageについて話しています – beryllium

+0

申し訳ありません。答えを修正しました。 –

+0

はい! 'imageNamed'を使ってアプリケーションをプロファイリングする際に、' imageWithContentsOfFile'メモリが15MBの場合、私のアプリは120MBのメモリを使いました。しかし残念ながら、それは悪いアニメーションの問題を解決しません( –

2

いいえ、UIImageViewはイメージをキャッシュしません。 imageプロパティがretainとして宣言されているので、新しいイメージを設定すると、imageViewはreleaseメッセージを古いイメージに、retainを新しいイメージに送信します。

UIImageViewをアニメーション化する最も簡単な方法は、プロパティanimationImagesに画像の配列を設定し、方法 [UIImage imageNamed:@""]startAnimating方法

imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.png"], ..., nil]; 
imageView.animationDuration = 2.0f; 
[imageView startAnimating]; 
+0

しかし、UIImageView.animationImagesを使用して850x535のサイズの画像100枚をアニメーション化しようとしたことがありますか?私はそれを試みました、メモリのためにアプリがクラッシュしました。私が考える理由は、animationImagesは多くのメモリであるすべての画像を保持しているからです。または、私は何か間違って言っているのですか?もしそうなら、私を修正してください。 Thx –

+0

はい、私はあなたが正しいと思います。この方法は最も簡単ですが、効率的ではありません。 – beryllium

+0

あなたは、グラフィックスライブラリを使用して大きな画像を再生し、パフォーマンスを良好に保てばよいと思いますか?何でも知ってますか? Thx –

4

UIImageViewは[UIImage imageNamed:@""]のようにイメージをキャッシュしません。残念ながら、たくさんの画像がある場合、imageNamedはメモリ不足のためアプリケーションをクラッシュさせます。

[UIImage imageWithContensOfFile:@""]を使用してNSArrayのすべての画像をプリロードすることができます。 配列を取得したら、必要な操作を行うことができます。

+1

私はそれが奇妙だと思う!NSArrayはimageNamedによってキャッシュされた画像だけでなく、それ自身の中の画像のメモリも保持します。または? –

関連する問題