2

マップを表示する CATiledLayer を含む UIView を持つ UIScrollView があります。

非常に深くズームインできる概要から始めなければなりません。そこで、4 つの異なるサイズのマップ (最大のものは 5700 x 6700px のようなもの) で 4 つの異なる画像 (実際には PDF) を作成しました。

最小 (概要) を CATiledLayer に追加し、特定のズーム レベルで画像を交換します。

これまでのところ、これはちょっとうまくいきます。

問題は、最大のマップ (最も近いズーム) を表示すると、タイルが非常に大きくなり、それらを描画するのに時間がかかることです (そして、詳細/バイアスのレベルに応じて、アプリはクラッシュを警告するメモリを生成します)。

最大のマップから始めて、マップが最初に表示されるときにズーム レベルを最小に設定しようとしましたが、タイルが非常に小さくなるため (最小ズームを設定しないと)、概観を描画するのに時間がかかります、すべてがスムーズに動作します)。

マップを切り替えるときにタイルのサイズを調整しようとしましたが、どうやらうまくいきません。

どうすればこれを解決できますか?;)

助けてくれてありがとう...

編集:

私は今、2 つの別々の CAtiledLayers を定義し、特定のズーム レベルに達したときにそれらを交換しようとしていますが、アプリがクラッシュしますか?

[myContentView.layer replaceSublayer: tiledLayer with: tiledLayerBig];

オーマイ... :)

編集2:

わかりました-動作しました-多かれ少なかれ。現在起こっている唯一のことは、最大の画像を追加すると CATiledLayer が奇妙な動作をすることです。しばらくは正常に動作しますが、一定量のタイルが描画されると、メモリ警告が表示され、最終的にアプリがクラッシュします。私は実際に、目に見えないタイルがビューポートを離れるときに破棄されることを期待しています。これは起こらないようで、最終的にはすべてのタイルが描画され、iPhone メモリには多すぎるようです... :(

これを解決する方法はありますか?

4

1 に答える 1

0

使用されなくなったタイルがメモリから解放されていないようです。カスタムオーバーライドは何ですか

- (void)drawRect:(CGRect)rect method

のように見える?

于 2011-07-14T17:58:19.403 に答える