私は何週間も何かに取り組んできました (iOS) が、受け入れられる解決策を見つけられないようです。
要件
- 10000x10000 ピクセルの背景画像を表示する
- 応答性の高いズームとスクロール
- カスタム描画されたオーバーレイ
- オーバーレイの要素はインタラクティブで (要素をタップして強調表示するなど)、ピースをオンまたはオフにすることができます。
- iOS4.0
これは架空の町の地図であり、その上に道路、線、エリア、建物が描かれたクレイジーなシステムと考えてください。さまざまな不透明度、いくつかのアイコン画像などで塗りつぶされた CGPath の混合物。これは、Google マップ アプリのより複雑なバージョンのようなものです。
私が試したこと:
1 - 複数の CATiled レイヤー
ビュー階層:
- ScrollView
- ->ContainerView
- -->TiledView (CATiledLayer 10000x10000)
- --->OverlayView (CATiledLayer 10000x10000)
結果: 左右の魔法のリンゴ キャッシュからタイルをドロップします。2 つの CAtiledlayers は正しいパスではないようです。オーバーレイの更新は高速ではありません。
2 - OverlayView の TiledView のサブクラス
ビュー階層:
- ScrollView
- ->OverlayView (TiledView CATiledLayer 10000x10000 のサブクラス)
結果: オーバーレイの更新をレンダリングするのに時間がかかりすぎます。タイルの更新が遅い
3 - 単一のコンテナ ビューを使用した Scrollview
ビュー階層:
- ScrollView
- ->ContainerView (10000x10000)
- -->OverlayView (CALayer 10000x10000)
- -->TiledView (CATiledLayer 10000x10000)
結果: OverlayView が大量のメモリを消費するため、機能しません。TileView は CATiledLayer によってサポートされているため問題ありません
4 - スクロール デリゲートと CTM スケール/変換を使用して大きいことをシミュレートする OverlayView
ビュー階層:
- OverlayView (CALayer 1024x768)
- ScrollView
- ->TiledView (CATiledLayer 10000x10000)
結果: scrollview デリゲートを使用して、オーバーレイ ビューのオフセットとズームを調整します。この方法の問題点は、drawrect が 1 秒間に 100 回呼び出されることと、オーバーレイ ビューの描画速度が十分ではないため、完全に 1 fps まで遅れることです。
それが私がいるところです。この最後の方法は何かに取り組んでいるように感じますが、ドローレクトの狂気を飼いならすにはクレイジーな作業が必要になるでしょう. 他の考えは、OpenGL で何かに取り組もうとすることです。
それらを実行する前に、コミュニティに、同様の要件に直面して彼らが何をするか/何をしたかを確認するように頼むと思っていました。
助けてくれてありがとう。