2012-02-09 2 views
1

私は、サンプルアプリケーションのPhotoScrollerに似たアプリを持っています。スクロールビューでたくさんの大きな画像(2048x1536)私はその部分負荷効果が気に入らないので、タイルアプローチを使用していません。私は一度に全体のイメージを表示したいと思います。バックグラウンドスレッドでイメージをロードしています。初めてUIImageViewで読み込まれたイメージを使用しようとすると、すでにメモリに入っていても0.5秒間メインスレッドがブロックされます。大きなUIImageを表示すると、すでにメモリに入っていてもジッタが発生します。

私はこの遅れがどこから来ているかを見るためにプロファイラを使用しましたが、私はそこに有用な情報を見つけることができませんでした。

iOSで初めて画像データを使用しているときなどにコピーされますか?どういうわけかバックグラウンドスレッドでもそれを行うことはできますか?

編集:私は再びそこに戻ってスクロールして、同じUIImage秒の時間を使用する場合、

+0

UIImageViewが引き続き動作する場合は、[UIImageをCALayerに直接追加することもできます。](http://stackoverflow.com/questions/1564940/how-to-display-an-image-or-uiimage-with -an-plain-calayer) –

+0

2048x1536イメージをメモリにロードするのは愚かです。つまり、1イメージに12MbのRAMを使用します。 ImageIOを使用してイメージをターゲットサイズに縮小して表示します。 – Nyx0uf

答えて

0

私はそれを解決したと思います。 UIImageがディスクやWebからUIImageをロードしたときに正しいフォーマットでロードされません。だからあなたがそれを表示したいとき、iosはこのイメージを彼が使うことができるフォーマットに再フォーマットしなければなりません。この改質は、画像が十分に大きいときに目に見える吃音を引き起こす可能性がある。

これを防ぐには、UIImageをロードした後で再フォーマットする必要があります。バックグラウンドで(私が知る限り)安全に行うことができます。 This linkにその方法を示します。

0

があまりにもバックグラウンドスレッドで画像を作成してみ遅延がありません。 inetまたはローカルから画像を読み込みますか?バンドルまたはカスタムパス?

+0

「バックグラウンドスレッドでイメージを作成する」とはどういう意味ですか?全体のuiimageはバックグラウンドで作成されます。バックグラウンドでUIImageViewを作成する必要がありますか?イメージはローカルパスからロードされます(バンドルではありません) – Lope

関連する問題