Чтобы расширить ответ от yonel, вы не можете просто использовать setImage уже созданного свойства MKAnnotationView.image, чтобы установить для него новое изображение в основной части вашего MapViewController.
В MapViewController должен быть реализован метод MKMapViewDelgate:
- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
В нем вы будете получать уведомления с карты при добавлении аннотации.
Итак, чтобы обрезать ваш annotationView, вы должны расширить MKAnnotation и создать свой собственный класс аннотаций. Вы просто добавляете этот пользовательский экземпляр аннотации, чтобы позволить вашему mapView автоматически отображать также настроенный (расширенный, т.е. ваш собственный) вид аннотации для этого типа аннотации (то есть класса).
То есть метод делегата уведомляет вас о том, что добавлена пользовательская аннотация, поэтому там вы проверяете класс аннотации и, если это ваш класс аннотации, вы создаете новый экземпляр вашего пользовательского annotationView.
То есть использовать метод init этого класса customAnnotation как:
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)identifier
Вы должны реализовать этот метод самостоятельно.
В этом методе вы можете использовать setImage, чтобы установить любое изображение, которое вам нравится. Это будет использоваться для этого annotationView.
Я полагаю, что при вашем использовании заданное изображение было стерто при изменении MapType, вероятно, это произошло потому, что он создавал новый экземпляр annotationView для карты (которая представляет собой новую карту и снова добавляет аннотации создание annnotationViews из метода делегата).
Если вы установите изображение в методе init, оно не будет потеряно (так как оно всегда устанавливается для экземпляра).
Помогает ли это?