1

次のチュートリアルのコードを使用して、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:

http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapViewDelegate_Protocol/MKMapViewDelegate/MKMapViewDelegate.html

4

2 に答える 2

3

を使用する代わりに、のプロパティ.frame.originを取得してみてください。this を使用すると、 を使用して注釈の起点を取得できます。MKAnnotationcoordinatecoordinateMKMapViewconvertCoordinate:toPointToView:

お役に立てれば!

于 2010-12-21T21:28:40.857 に答える
0

Apple のサンプル アプリWeatherMapにはカスタム注釈があり、それらを配置する方法を示しています。コードは簡単で、お勧めです。

于 2010-12-21T21:19:08.907 に答える