なぜこれが機能しないのですか?
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
if (TRACE_LOG) NSLog(@"%s", __FUNCTION__);
[mapView selectAnnotation:[views lastObject] animated:YES];
return;
}
ありがとう、Z@K!
なぜこれが機能しないのですか?
- (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];
注: ピン ドロップ アニメーションを有効にしている場合は、無効になります。基本的に、アノテーションがマップ ビューに追加されるとすぐにアノテーションが選択されるため、アニメーションが中断されます。
ピン ドロップ アニメーションが終了するのを待ってから選択したい場合は、セミハックな方法でそれを実現できます。まず、View Controller が 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];
}