Pour développer la réponse de yonel, vous ne pouvez pas utiliser la propriété setImage de la propriété MKAnnotationView.image déjà créée pour définir une nouvelle image dans la partie principale de votre MapViewController.
Le MapViewController doit avoir mis en œuvre la méthode MKMapViewDelgate:
- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
Dans ce document, vous serez informé de la carte lorsqu'une annotation est ajoutée. Donc, pour personnaliser votre annotationView, vous devez étendre MKAnnotation et créer votre propre classe d'annotations. Vous ajoutez simplement cette instance d'annotation personnalisée pour que votre mapView affiche automatiquement une annotation personnalisée (étendue, c'est-à-dire la vôtre) pour ce type d'annotation (par exemple, classe). En d'autres termes, la méthode déléguée vous avertit que l'annotation personnalisée est ajoutée. Dans cette section, vous vérifiez la classe d'annotation et, s'il s'agit de votre classe d'annotations, créez une nouvelle instance de votre annotation personnalisée.
C'est, d'utiliser la méthode d'initialisation de cette classe customAnnotation comme:
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)identifier
Vous devez mettre en œuvre cette méthode vous-même.
Dans cette méthode, vous pouvez utiliser setImage pour définir une image de votre choix. Cela sera utilisé pour cette annotationView. Je suppose que dans votre utilisation, l'image définie a été effacée lors du changement de MapType, probablement parce qu'elle créait une nouvelle instance d'une annotationView pour la carte (qui est une nouvelle carte et qui ajoute à nouveau des annotations et recréer annnotationViews à partir de la méthode déléguée).
Si vous définissez l'image dans la méthode init, elle ne sera pas perdue (car elle est toujours définie pour l'instance).
Est-ce que cela aide?