ios-mapkit, comportamiento extraño con annotations de image personalizadas

He escrito un código para mostrar annotations con imágenes personalizadas en una vista de map. Mi delegado de mapview implementa este método para personalizar la anotación cuando se colocan en el map:

- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id<MKAnnotation>) annotation { if ([annotation isKindOfClass:[Station class]]) { Station *current = (Station *)annotation; MKPinAnnotationView *customPinview = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil]; if([[current type] compare:FONTANELLA]==NSOrdenetworkingSame) customPinview.pinColor = MKPinAnnotationColorPurple; else{ int test=current.bici; if(test==0) customPinview.image = [UIImage imageNamed:@"bicimir.png"]; else if(test<4) customPinview.image = [UIImage imageNamed:@"bicimi.png"]; else if(test>=4) customPinview.image = [UIImage imageNamed:@"bicimig.png"]; } customPinview.animatesDrop = NO; customPinview.canShowCallout = YES; return customPinview; } else{ NSString *identifier=@"MyLocation"; MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [_mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; return annotationView; } 

}

El problema es un comportamiento extraño cuando hago clic en una anotación personalizada en el map: se muestra el cambio de image y el pin rojo pnetworkingeterminado.

¿Por qué este comportamiento? ¿Y cómo puedo evitarlo?

Cuando desee usar una image personalizada para una vista de anotación, cree un MKAnnotationView genérico en lugar de un MKPinAnnotationView .

A MKPinAnnotationView le gusta mostrar su image pnetworkingeterminada, que es un pin.

Reorganice la lógica un poco para que para FONTANELLA , cree un MKPinAnnotationView pero para el rest un MKAnnotationView .

Además, realmente debería implementar la reutilización de la vista de anotación para todos los casos (y la última parte no tiene sentido, ya que no se hace nada si la queue no devuelve nada, podría hacerlo).

dentro del file .h

 @interface AddressAnnotation : NSObject<MKAnnotation> { CLLocationCoordinate2D coordinate; NSString *mPinColor; } @property (nonatomic, retain) NSString *mPinColor; @end 

en el file .m

 @implementation AddressAnnotation @synthesize coordinate mPinColor; - (NSString *)pincolor{ return mPinColor; } - (void) setpincolor:(NSString*) String1{ mPinColor = String1; } -(id)initWithCoordinate:(CLLocationCoordinate2D) c{ coordinate=c; NSLog(@"%f,%f",c.latitude,c.longitude); return self; } @end 

dentro del file de class .m

 - (MKAnnotationView *) mapView:(MKMapView *)mapView1 viewForAnnotation:(AddressAnnotation *) annotation{ UIImage *anImage=[[UIImage alloc] init]; MKAnnotationView *annView=(MKAnnotationView*)[mapView1 dequeueReusableAnnotationViewWithIdentifier:@"annotation"]; if(annView==nil) { annView=[[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"annotation"] autorelease]; } if([annotation.mPinColor isEqualToString:@"green"]) { anImage=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Google pin green.png" ofType:nil]]; } else if([annotation.mPinColor isEqualToString:@"networking"]) { anImage=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Google pin networking.png" ofType:nil]]; } else if([annotation.mPinColor isEqualToString:@"blue"]) { anImage=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Google pin blue.png" ofType:nil]]; } annView.image = anImage; return annView; }