How to open call out MKAnnotationView programmatically? (iPhone, MapKit)

人走茶凉 提交于 2019-11-27 05:25:11

问题


I want to open up the callout for an MKPinAnnotationView programmatically. Eg I drop 10 pins on the map, and want to open up the one closest to me. How would I go about doing this?

Apple has specified the 'selected' parameter for MKAnnotationView's, but discourages setting it directly (this doesn't work, tried it).

For the rest MKAnnotationView only has a setHighlighted (same story), and can ShowCallout method..

Any hints if this is possible at all?


回答1:


In your mapViewController create an action method:

- (void)openAnnotation:(id)annotation 
{
    //mv is the mapView
    [mv selectAnnotation:annotation animated:YES];

}

You can then determine the closest annotation based on current location and walking the annotations available in the array.

[mv annotations];

Once the closest annotation is calculated, call:

[self openAnnotation:closestAnnotation];

The mapView should scroll automatically to place your annotation in the center of the display area.




回答2:


In swift 3 this is updated to:

func openAnnotation(annotation: MkAnnotation) {
_ = [mapView .selectAnnotation(annotation, animated: true)]
}

and can be called using any annotation (this will open the annotation callout view and attempt to center the annotation on the map)

For example using the second annotation in a hypothetical list of annotations.

openAnnotation(annotation: mapView.annotations[1])


来源:https://stackoverflow.com/questions/2193843/how-to-open-call-out-mkannotationview-programmatically-iphone-mapkit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!