iOS5 / 6(iPhone)に非常にカスタムなタイルマップレイヤー/ビューを実装する必要があります。これは、サーバーから画像やデータ(JSON)としてタイルをロードします。これはグーグルマップに似ていますが、特定の時点で非常に具体的であるため、次のようなソリューションを 簡単に使用することはできません。
- グーグルマップまたは
- route-me(MapBoxで使用)
CATiledLayer
と組み合わせてUIScrollView
重要なのは、私の特定の仕様のために、そこにあるソリューションのどれも実際には私を助けません。あなたが考えるなら、適切な解決策があります、教えてください!!!
そうでない場合:
私の場合に最適な解決策を見つけるのを手伝ってください!!!
「しかし、なぜ私はこれらの美しいソリューションを使用できないのですか?」
知っておく必要のあるいくつかの制限があります。
3つのズームレベル(0、1、2)のみを使用します
すべてのタイルには、次のズームレベル(=ズームファクター3)に9つのサブタイルがあります(他のキットのほとんどが4つのサブタイル=ズームファクター2で行うのとは異なります)
最初のレイヤーの初期サイズは(ピクセル/ポイントで言えば半分です)768*1024です。
2番目のレイヤーは3倍広くて高い(zoomfactor 3 !!!)-> 2304 * 30723番目のレイヤーは2番目のレイヤー
よりも同じように広くて高い->6912* 9216サーバーからの各タイルは256x256ピクセルです
したがって、すべてのサブレイヤーはタイル数の9倍になります(1番目のレイヤーに12、2番目に108、3番目に972)
すべてのタイルには、背景画像(約6KBのサイズ)(サーバーから画像として読み込まれる)と前景情報(サーバーからすべてのタイルのJSONとして読み込まれる-10〜15KBのサイズ)
->前景情報JSONには次のいずれかが含まれますオーバーレイ画像(Googleのトラフィックなど)またはローカルタイルの座標空間に描画されるローカルタイル情報(注釈など、タイルごと)背景タイル全体をディスクにキャッシュしたいのですが、変更されることはありません。
タイルが再度リロードされるまで、各タイルのoverlay-tile-images/overlay-tile-informationを一定時間キャッシュしたい
ズームはピンチとダブルタップで行う必要があります
私の考慮事項のいくつか:
キャッシングは問題ではありません。CoreDataなどを介して行います
スムーズなスクロールを表示するために、UIScrollViewを考えました
ピンチを使用したいので、次のズームレベルを突破するたびに、次のズームレベルのタイルを描画する必要があります
コンテンツは表示領域にのみ描画する必要があります(iPhone 5 320x500の場合)
メモリ効率を高めるために、表示されていないタイルは削除する必要があります。ただし、タイルが表示されている中心から一定量のピクセル/ポイント離れている場合にのみ、すぐに削除しないでください。ロードされて表示されたばかりのタイルを即座に表示するには、「display-cache」が必要です。それとも、もっと良いテクニックがありますか?
どのタイルが表示されているかがわかっているので、ディスクまたはサーバーから非同期でバックグラウンドを即座にロードできます。タイルで私もそうします-JSON。次に、タイルのJSON情報を抽出し(「オーバーレイは直接の画像または都市名などの情報であり、タイルに描画する必要があります」)、オーバーレイを描画またはロードします(DB /ディスクまたはサーバーから)
UIScrollViewは、タイルビューの最大サイズを処理するのに十分効率的ですか
CALayerをサブレイヤーとして使用して描画する必要がありますか?Quartzを使用して、大きな「キャンバス」を直接描画する必要がありますか?