質問

なぜこれが機能しないのですか?

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
    if (TRACE_LOG) NSLog(@"%s", __FUNCTION__);

    [mapView selectAnnotation:[views lastObject] animated:YES];

    return;
}

ありがとう、Z@K!

役に立ちましたか?

解決

アノテーションオブジェクトを選択する必要があるため、それに対応するビューではありません。

私は100%確信がありませんが、以下はうまくいくべきだと思います:

MKAnnotationView* annotationView = (MKAnnotationView*)[views lastObject];
[mapView selectAnnotation:annotationView.annotation animated:YES];

アノテーションをどこかに保存する場合は、そのストレージから直接必要な注釈オブジェクトを取得する方が良いかもしれません。これらのすべての方法は、現在画面に表示されている注釈を選択しようとする場合にのみ影響することに注意してください。

他のヒント

注釈が1つしかない場合、これが最も簡単な方法です。

[mapView selectAnnotation:[mapView.annotations objectAtIndex:0] animated:true];

注:ピンドロップアニメーションを有効にしている場合、これはそれを無効にします。基本的に、マップビューに追加されるとすぐにアノテーションを選択して、アニメーションを切り取ります。

ピンドロップアニメーションが完了するのを選択する前に、それを実現するための半ハッキーな方法があります。まず、ビューコントローラーがmkmapviewdelegateとして設定されていることを確認してください。

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:.7 target:self selector:@selector(pinDropped) userInfo:nil repeats:NO];

}

- (void) pinDropped {
    [mapView selectAnnotation:[mapView.annotations objectAtIndex:0] animated:true];
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top