数か月前、Apple のサイトで本当に素晴らしいサンプル コードを見つけました。このサンプルは「LargeImageDownsizing」と呼ばれ、画像がリソースから読み取られて画面にレンダリングされる方法について多くのことを説明しています。
そのコードを掘り下げていると、少し気になることがわかりました。縮小された画像は、CATiledLayer を持つビューに渡されますが、メモリ パフォーマンスを向上させるために各タイルに画像を提供するのではなく、タイル サイズを設定してから画像を読み込むだけです (コンセプトに簡単に移動できるようにしています)。 )。
だから私の質問は基本的になぜですか?正しい方法でフィードされていない場合、CATiledLayer を使用するのはなぜですか?通常の UIImageView を使用できたはずです...
そのため、自分が正しいかどうかを確認するためにいくつかのテストを行いました。サブビューとして画像ビューを含むスクロールビューを追加し、ズームのためにデリゲートスクロールビューに応答するコードを簡単に変更します。私は、デバイスとシムでテストしてこれらの結論に行きました:
- -メモリへの影響とフットプリントはまったく同じで、ズームスクロール操作中でもまったく驚くことはありません。画像はメモリに解凍されます
- - 時間プロファイルによると、タイルビューはスクロールズーム操作中に uiimageview の代わりに描画されるのにより多くの時間がかかりますが、uiimageview が既に描画されていることはまったく驚きではありません
- -メモリ警告を送信した場合、2つのソリューション間で何も変化しません(simのみ)
- -コア アニメーションのパフォーマンスをテストする 60FPS 前後で同じ結果が得られます
では、これらの 2 つのビュー/レイヤーの間の取り決めは何ですか?これらの特定のケースで、なぜ一方を選択する必要があるのでしょうか? UIImageView が戦いに勝ったようです。
誰かがそれを理解するのを手伝ってくれることを願っています。