8

MKOverlayに既に追加されているを更新する (つまり移動する) 方法はありMKMapViewますか? 古いものを削除して新しいものを追加するのはひどいです(遅い)。

つまり、オーバーレイが画面上を移動するときに、この関数を呼び出すバックグラウンド関数をトリガーしたいと思います。

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay

MKAnnotionsもう少し良いと思いますが、、、などは使えMKPolylineず、MKPolygon情報全体が1点に減っています)

4

6 に答える 6

4

MKOverlayViewMapKit に指定された mapRect を強制的に再レン​​ダリングさせる次のメソッドがあります。

- (void)setNeedsDisplayInMapRect:(MKMapRect)mapRect

- (void)setNeedsDisplayInMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale

タイマー (またはオーバーレイを更新する必要があることを判断するための定期的な HTTP 要求またはその他のメソッド) を使用している場合、overlayView で上記のメソッドのいずれかを呼び出すと、マップ上のそのスポットが再レンダリングされます (つまり-canDrawMapRect:zoomScale:、再度呼び出され-drawMapRect:zoomScale:inContext:、前者が YES を返す場合に呼び出されます)。


アップデート:

どの mapRect を再レンダリングする必要があるかわからない場合は、定数を mapRect として使用できる可能性があります。これにより、マップ全体のオーバーレイが再読み込みされます (表示されると)。MKMapRectWorld

于 2010-08-11T18:34:15.987 に答える
1

を使用しMKAnnotationsます。それらの座標を変更できます。タッチ関連のものを無効にするだけです。注釈を描画するには、独自の描画コードが必要ですが、OpenGL はおそらくうまくいくでしょう。誰も違いがわからないでしょう。

于 2013-09-12T00:33:49.347 に答える
0

実際には、新しいパスを設定する前に古いパスをクリアするために、オーバーレイ ビューに強制的にパスを無効にする必要がありました。[polygonView 無効化パス]. マップ ビューに表示の更新が必要であることを伝えるだけでは不十分でした。

于 2010-10-10T20:43:11.013 に答える