次のチュートリアルのコードを使用して、http://www.zenbrains.com/blog/en/2010/05/detectar-cuando-se-selecciona-una-anotacion-mkannotation-en-mapa-mkmapview/、できました各 MKAnnotation にオブザーバーを追加し、選択/選択解除状態の通知を受け取ります。
選択注釈の上に UIView を追加して、場所に関する関連情報を表示しようとしています。この情報は、ピンの吹き出しに許可されている 2 行 (タイトル/サブタイトル) で伝えることはできません。
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
Annotation *a = (Annotation *)object;
// Alternatively attempted using:
//Annotation *a = (Annotation *)[mapView.selectedAnnotations objectAtIndex:0];
NSString *action = (NSString *)context;
if ([action isEqualToString:ANNOTATION_SELECTED_DESELECTED]) {
BOOL annotationSelected = [[change valueForKey:@"new"] boolValue];
if (annotationSelected) {
// Actions when annotation selected
CGPoint origin = a.frame.origin;
NSLog(@"origin (%f, %f) ", origin.x, origin.y);
// Test
UIView *v = [[UIView alloc] init];
[v setBackgroundColor:[UIColor orangeColor]];
[v setFrame:CGRectMake(origin.x, origin.y , 300, 300)];
[self.view addSubview:v];
[v release];
}else {
// Accions when annotation deselected
}
}
}
を使用した結果Annotation *a = (Annotation *)object
origin (154373.000000, 197135.000000)
origin (154394.000000, 197152.000000)
origin (154445.000000, 197011.000000)
を使用した結果Annotation *a = (Annotation *)[mapView.selectedAnnotations objectAtIndex:0];
origin (0.000000, 0.000000)
origin (0.000000, 0.000000)
origin (0.000000, 0.000000)
数は多い。ビュー (1024 x 768) に対して相対的ではありません。それらはマップ全体に関連していると思います。ビュー全体に対する正確な座標を検出して、ビューを適切に配置できるようにするにはどうすればよいですか?
ノート:
おそらく上記のコードと同じことを、はるかに単純な実装で達成できるこれら2つのメソッドを発見しました。
注釈ビューの選択
– mapView:didSelectAnnotationView:
– mapView:didDeselectAnnotationView: