2010-02-03 11 views
26

Chcę programowo otworzyć objaśnienie dla MKPinAnnotationView. Np. Upuszczam 10 szpilek na mapie i chcę otworzyć najbliższy mi. Jak miałbym to zrobić?Jak programowo otworzyć wywołanie MKAnnotationView? (iPhone, MapKit)

Apple określił "wybrany" parametr dla MKAnnotationView's, ale odradza ustawienie go bezpośrednio (to nie działa, wypróbowałem to).

do końca MKAnnotationView ma tylko setHighlighted (sama historia) i może ShowCallout metoda ..

Wszelkie wskazówki, czy to jest w ogóle możliwe?

Odpowiedz

76

W swojej mapViewController stworzyć metodę Działanie:

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

} 

Następnie można określić najbliższy adnotacji na podstawie bieżącej lokalizacji i chodzenie adnotacji dostępne w tablicy.

[mv annotations]; 

Po najbliżej adnotacja jest obliczana, zadzwoń:

[self openAnnotation:closestAnnotation]; 

MapView powinna przewijać automatycznie umieścić adnotację w centrum obszaru wyświetlania.

+0

Dzięki Nate za naprawienie literówki. –

+0

To jest niesamowity gość .. –

+1

Jeśli wiesz, że adnotacja, którą chcesz programowo wybrać, będzie widoczna w widocznym obszarze widoku mapy, możesz użyć "[mv adnotationsInMapRect: mv.visibleMapRect]". Jeśli pracujesz z dużymi zestawami adnotacji mapy, zwiększy to wydajność. –

1

w Swift 3 to zaktualizowana:

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

i mogą być wywoływane za pomocą dowolnego adnotacji (to otworzyć widok adnotacji objaśnienia i próbować centrum adnotacji na mapie)

Na przykład przy użyciu drugiej adnotacji w hipotetycznej liście adnotacji.

openAnnotation(annotation: mapView.annotations[1]) 
+0

Twój kod to dziwna mieszanka ObjC (nawiasy kwadratowe) i Swift. Po co tworzyć tablicę, a następnie ją odrzucić? –