2016-05-16 1 views
6

IOS上のMapkitはオーバーレイのデキューをサポートしていますか? (注釈のように)。もしそうなら、これを達成するためのコードは何ですか?IOS上のMapkitはオーバーレイのデキューをサポートしていますか? (注釈のように)

背景:アノテーションを使用すると、デキューする方法で必要になったときにMapKitにビューをインスタンス化するように、アノテーションを追加することができます。しかし、もし私が全国にたくさんあるとすれば、オーバーレイについては同じことはどうでしょうか?どのオーバーレイが表示されているかをチェックするためのコードを記述してから、それらをインスタンシエイト/削除する必要がありますか?

+0

PS。また、人々が実際に(これが問題であれば)マップ上にオーバーレイを「注釈」として配置するかどうか、これを回避するには?オーバーレイの一部がオフスクリーンである可能性があるため、おそらく大きなオーバーレイでは機能しませんでした。 – Greg

+0

PSS。実際には全国に8000程度のオーバレイがありますので、最終的にはそれらをすべて前もって読み込んでいますか、手動で管理する必要がありますか?すなわち目に見えるもの – Greg

答えて

3

マップキットは、注釈ビューでこれをサポートするのと同じ方法でオーバーレイの再利用をサポートしていません。この理由の1つは、確かに2つのオブジェクトが類似していないことです。オーバーレイはマップ上の領域を表すモデルオブジェクトですが、注釈ビューは時折マップに注釈の位置を表示するために使用されるビューオブジェクトです。ビューオブジェクトを再利用するテクニックは、UIKitの他の場所、特にTable Viewセルやさまざまなコレクションビューのビットマップで使用される最適化です。

ビューの再利用パターンは、いくつかのデータインデックス(テーブルインデックスパス、マップ座標)を確立し、特定のインデックス/ロケーションが表示されるときに使用する適切なビューオブジェクトをデリゲートに提供することです。データオブジェクトが視界を抜けると、ビューオブジェクトはキューにリサイクルされます。

注釈はオーバーレイに似ており、MapKitは理由もあり再利用できません。表示されているデータです。

注釈ビューと同様のオブジェクトはオーバーレイレンダラーで、オーバーレイのレンダリングを提供します(もちろん!)。私は、これらが再利用されない理由は、ビューシステムオブジェクトではなく、おそらくはるかに軽量であるため、再利用のメリットがほとんどないからです。 iOS 7.0まで、MapViewデリゲートにオーバーレイ用のビューオブジェクトを提供しましたが、これはレンダラのコンセプトに置き換えられました。

私は役立つことを願っています。

これが原因ですか?

+0

私は全国に置くために数百のオーバーレイを持っています。大きな数字を読み込んでからMapViewに任せて、何を表示する必要があるのか​​を最適化するという考えはありますか?これらをメインスレッドから外す必要があるかもしれないので、アプリ起動時の起動時間はユーザーに気付かれません。また私はここに質問がある表示オーバーレイのリストを取得する方法の問題があります:http://stackoverflow.com/questions/37433336/how-to-get-visible-overlays-in-mapkit-ie -mkoverlay-mkoverlayrender-from-a-ma – Greg

+0

PS実際には全国で8000程度のオーバレイが配置されているので、最終的にはそれらをすべて前もってロードするか、手動で管理する必要があります。任意の時点ではるかに少ない数がロードされますか?つまり、表示されるものは – Greg

+0

8000です。 私は7200オーバーレイが米国に広がってテストを行い、iPhone 5/iOS 9.3で目立って鈍いことがわかりました。適切なパフォーマンスを得るには、何らかのタイリングを行う必要があります。しかし、私はそれに簡単な刺し傷をとり、特に有望ではありませんでした。大量のオーバーレイ自体を追加または削除する操作はそれほど高速ではないようです。おそらく、データを再編成して、各MKOverlayがマップの領域内の「オーバーレイ」のタイルを表すようにすることができます。あなたのオーバーレイレンダラーは、適切なデータ項目を描画することについて賢明である必要があります。 – BrentM

関連する問題