2011-11-24 9 views
8

tengo pin anotación personalizada en aplicación:cambios personalizados pin anotación por defecto lápiz rojo al toque largo

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

cuando vuelvo la vista personalizada y hacer setImage para annotationView de marca de posición tales como:

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

, pero si toco durante largo tiempo mi pin de anotación, cambia el aspecto a su vista predeterminada (RedPin). No puedo entender qué método se usa con un toque prolongado. Intenté jugar con UITapGestureRecognizer, pero no lo descubrí. Si solo toco el pin de anotación todo funciona bien y la vista de mi pin personalizada no desaparece. Se puede ver lo que quiero decir en esta captura de pantalla: so useful image with example

Así que, ¿por qué los cambios de apariencia pin anotación de mucho toque?

Respuesta

23

Por lo tanto, si desea utilizar una imagen personalizada para una vista de anotación, utilice siempre una MKAnnotationView genérica en lugar de una MKPinAnnotationView. tengo MKPinAnnotationView en un solo lugar, cuando se sustituyo con MKAnnotationView todo funciona correctamente ahora:

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

Gracias. me ayudo mucho. –

+1

Funcionó como encanto. El hecho es que esa vista MKPinAnnotation es una subclase con vista de MKAnnotation con funcionalidad que no desea. – igraczech

Cuestiones relacionadas