2011-11-24 10 views
8

Mam niestandardowego adnotacji szpilkę w aplikacji:niestandardowe zmiany adnotacji pin domyślne pin czerwony na długi kranu

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    return [kml viewForAnnotation:annotation type:state]; 
} 

gdzie powrócić widok niestandardowy i uczynić setImage dla annotationView z oznaczenia miejsca, takie jak:

- (MKAnnotationView *)viewForAnnotation:(id <MKAnnotation>)point type:(int)state 
{ 
    // Find the KMLPlacemark object that owns this point and get 
    // the view from it. 
    for (KMLPlacemark *placemark in _placemarks) { 
     if ([placemark point] == point) 
     { 
      UIButton *disclosureButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure]; 
      [[placemark annotationView] setCanShowCallout: YES];    
      [[placemark annotationView] setRightCalloutAccessoryView:disclosureButton]; 

      if (state == 0) 
      { 
       [[placemark annotationView] setImage:[UIImage imageNamed:@"ic_pin_tour.png"]]; 
      } 
      else 
      { 
       [[placemark annotationView] setImage:[UIImage imageNamed:@"ic_pin_point.png"]]; 
      } 

      return [placemark annotationView]; 
     } 
    } 
    return nil; 
} 

, ale jeśli długo pukam w moją szpilkę z adnotacją, zmienia ona wygląd na domyślny widok (RedPin). Nie mogę zrozumieć, która metoda jest wywoływana po długim naciśnięciu. Próbowałem grać z UITapGestureRecognizer, ale się nie dowiedziałem. Jeśli po prostu kliknę pinezkę adnotacji, wszystko działa poprawnie, a widok niestandardowego widoku notatek nie zniknie. Możesz zobaczyć, co mam na myśli na tym zrzucie ekranu: so useful image with example

Dlaczego więc zmienia się wygląd szpilki adnotacji po długim naciśnięciu?

Odpowiedz

23

Tak więc, jeśli chcesz użyć niestandardowego obrazu do widoku opisu, zawsze korzystaj z ogólnego MKAnnotationView zamiast z MKPinAnnotationView. mam MKPinAnnotationView w jednym miejscu, kiedy zastąpić go MKAnnotationView wszystko działa poprawnie teraz:

- (MKAnnotationView *)annotationView 
{ 
    if (!annotationView) { 
     id <MKAnnotation> annotation = [self point]; 
     if (annotation) { 
      MKAnnotationView *pin = 
       [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil]; 
      pin.canShowCallout = YES; 
      annotationView = pin; 
     } 
    } 
    return annotationView; 
} 
+0

Dzięki. bardzo mi pomogło. –

+1

Pracował jako urok. Faktem jest, że widok MKPinAnnotation jest podklasą z widokiem MKAnnotation z funkcjami, których nie chcesz. – igraczech

Powiązane problemy