2011-03-01 33 views
9

Cualquier sugerencia sobre lo que está mal con lo siguiente sería apreciado.iOS MapKit ¿Cambiar mapview maptype hace que la imagen de anotación cambie a pin?

Estoy agregando una imagen personalizada a una anotación con el siguiente código.

- (MKAnnotationView *)mapView:(MKMapView *)mapView 
      viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    if ([annotation isMemberOfClass:[MKUserLocation class]]) 
    { 
     return nil; 
    } 


    if ([annotation isMemberOfClass:[SpectatorPin class]]) 
    { 
     SpectatorPin *sp = (SpectatorPin *)annotation; 
     MKAnnotationView *view = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@"specPin"]; 
     if (view == nil) { 
      view = [[[MKPinAnnotationView alloc] initWithAnnotation:sp reuseIdentifier:@"specPin"] autorelease]; 
     } 
     view.image = [UIImage imageNamed:@"mylocation20x20.png"]; 
     view.canShowCallout = YES; 
     view.annotation=annotation; 
     return view; 
    } 

    //Should not get here 
    return nil; 

} 

La imagen se muestra correctamente al principio.

Tengo un control de segmento que cambia el tipo de mapa (estándar, satélite, híbrido). Estándar es el predeterminado. Tan pronto como selecciono el satélite, la imagen cambia inmediatamente a un pin. El método mapView: viewforAnnotation no se vuelve a llamar.

Saludos,

Jim

Respuesta

24

imagen personalizada para, se puede utilizar en lugar de MKAnnotationView MKPinAnnotationView.

MKAnnotationView *view = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@"specPin"]; 
     if (view == nil) { 
      view = [[[MKAnnotationView alloc] initWithAnnotation:sp reuseIdentifier:@"specPin"] autorelease]; 
     } 
+1

me ayudó :) – iSwaroop

1

Prueba esto:

MKAnnotationView *view = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@"specPin"]; 
     if (view == nil) { 
      view = [[[MKAnnotationView alloc] initWithAnnotation:sp reuseIdentifier:@"specPin"] autorelease]; 
     } 
Cuestiones relacionadas