3

カスタム イメージをオンMKAnnotationViewにしてピンを置き換えることに成功しました (関数を使用しましたsetImage)。MKMapViewただし、タイプが「標準」の場合のみ機能します。サテライト モードとハイブリッド モードでは常にピンが表示されます。

この奇妙な問題を解決するアイデアはありますか?

4

4 に答える 4

0

yonelからの回答を拡張するには、すでに作成されているMKAnnotationView.imageプロパティのsetImageを使用して、MapViewControllerのメイン部分に新しい画像を設定することはできません。

MapViewControllerは、MKMapViewDelgateメソッドを実装している必要があります。

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation

その中で、注釈が追加されたときにマップから通知されます。

したがって、annotationViewをカスタマイズするには、MKAnnotationを拡張し、独自のアノテーションクラスを作成する必要があります。このカスタムアノテーションインスタンスを追加するだけで、mapViewにこのアノテーションタイプ(つまりクラス)用にカスタマイズされた(拡張された、つまり独自の)annotationViewも自動的に表示されます。

つまり、delegateメソッドは、カスタムアノテーションが追加されたことを通知するため、そこでアノテーションクラスを確認し、それがアノテーションクラスである場合は、カスタムannotationViewの新しいインスタンスを作成します。

つまり、このcustomAnnotationクラスのinitメソッドを次のように使用します。

- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)identifier

このメソッドは自分で実装する必要があります。

この方法では、setImageを使用して任意の画像を設定できます。これは、このannotationViewに使用されます。

あなたの使用法では、MapTypeが変更されたときに設定された画像が消去されたと思います。これはおそらく、マップのannotationViewの新しいインスタンスを作成していたためです(これは新しいマップであり、注釈を再度追加し、annnotationViewsを再作成しました)。デリゲートメソッドから)。

initメソッドで画像を設定した場合、画像は失われません(常にインスタンスに設定されているため)。

これは役に立ちますか?

于 2010-02-09T00:40:31.643 に答える
0

答えは、MKPinAnnotationView の代わりに MKAnnotationView を使用することです。

iOS MapKit マップビューのマップタイプを変更すると、注釈画像がピンに変更されますか?

于 2013-08-08T16:57:43.870 に答える
0

奇妙なことに、両方のサブジェクト (カスタム MKAnnotationView とマップ モード) がリンクされていません。

ピンを交換する方法は奇妙に思えます (setImage ?)。「古典的な」方法は、

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation

デリゲートでカスタム注釈ビューを返し、MKMapViewDelegateプロトコルを実行します。

于 2010-01-20T15:26:23.170 に答える