2011-11-24 12 views
8

ho perno annotazione personalizzati app:personalizzate modifiche pin annotazione pin rosso di default a lungo rubinetto

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

dove torno visualizzazione personalizzata e fare setImage per annotationView di segnaposto come ad esempio:

- (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; 
} 

ma se tocco a lungo il mio pin annotazione cambia aspetto alla sua vista predefinita (RedPin). Non riesco a capire quale metodo viene chiamato al tocco lungo. Ho provato a giocare con UITapGestureRecognizer, ma non l'ho scoperto. Se tocchio il pin di annotazione tutto funziona correttamente e la mia vista pin di annotazione personalizzata non scompare. È possibile vedere cosa intendo in questa schermata: so useful image with example

Quindi, perché l'aspetto del pin di annotazione cambia al tocco lungo?

risposta

23

Quindi, se si desidera utilizzare un'immagine personalizzata per una vista annotazione, utilizzare sempre un MKAnnotationView generico anziché un MKPinAnnotationView. Ho MKPinAnnotationView in un solo luogo, quando lo sostituisco con MKAnnotationView tutto funziona correttamente ora:

- (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

Grazie. mi ha aiutato molto –

+1

Ha funzionato come fascino. Il fatto è che la vista MKPinAnnotation è una sottoclasse con la vista MKAnnotation con funzionalità che non vuoi. – igraczech

Problemi correlati