2011-10-25 9 views
5

Moja aplikacja umieszcza pinezkę na mapie, a następnie wybiera animację, dzięki czemu użytkownik ma wizualną wskazówkę i może od razu przeczytać tytuł/podtytuł. Poniższy kod działa zarówno w systemie iOS4, jak i iOS5, ale w systemie iOS5 adnotacja nie jest wybierana automatycznie, chyba że zmienię animację na NIE w metodzie selectAnnotation.MKAnawacje nie są wybierane w iOS5

Jakieś pomysły, dlaczego?

MapAnnotations *pushpin = [[MapAnnotations alloc] initWithCoordinate:coordinate]; 
pushpin.title = [selectedStation valueForKey:@"name"]; 
pushpin.subtitle = [selectedStation valueForKey:@"address"]; 
[stationMap addAnnotation:pushpin]; 
[stationMap selectAnnotation:pushpin animated:YES]; 

[pushpin release]; pushpin = nil; 

Odpowiedz

5

Nie wiem, dlaczego to działa, zanim jednak animacja prawdopodobnie wymaga widoku opisu zostać utworzony i gotowy co jest mało prawdopodobne natychmiast po dodaniu adnotacji.

Co można zrobić, to przenieść zaznaczenie do didAddAnnotationViews metody delegata, który powinien działać na wszystkich wersjach iOS:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views 
{ 
    for (MKAnnotationView *av in views) { 
     if ([av.annotation isKindOfClass:[MapAnnotations class]]) { 
      MapAnnotations *pushpin = (MapAnnotations *)av.annotation; 
      if (_this_pushpin_is_the_one_to_select) { 
       [mapView selectAnnotation:av.annotation animated:YES]; 
       break; //or return; 
      } 
     } 
    } 
} 
+0

Dzięki. Musieli zmienić coś w iOS5 pod kątem animacji w adnotacjach. To działa. Trochę za dużo kodu na tak prostą rzecz, ale wykonuje to zadanie. – afterxleep

+2

Aby uniknąć wyszukiwania, możesz dodać referencję do wybranej adnotacji jako ivar, gdy ją dodasz, więc musisz po prostu wywołać selectAnnotation w delegate. – Anna

Powiązane problemy