MKAnnotationПросмотры с изображением в режиме спутниковой карты - PullRequest
3 голосов
/ 18 декабря 2009

Я успешно установил пользовательское изображение на MKAnnotationView для замены выводов (я использовал функцию setImage). Но это работает только тогда, когда тип MKMapView "Стандартный". Спутниковый и гибридный режимы всегда отображают контакты.

У кого-нибудь есть идея решить эту странную проблему?

Ответы [ 4 ]

2 голосов
/ 13 августа 2011

У меня была точно такая же проблема, когда я пытался изменить изображение MKPinAnnotationView. Кажется, что вызов setImage не является постоянным, так как mapView время от времени вызывает setImage с изображением по умолчанию. Решение состоит в том, чтобы создать подкласс MKPinAnnotationView и переопределить setImage, чтобы всегда устанавливать ваше пользовательское изображение:

- (void)setImage:(UIImage *)image {
    [super setImage:[UIImage imageNamed:@"MyCustomPinImage.png"]];
}
0 голосов
/ 08 августа 2013
0 голосов
/ 09 февраля 2010

Чтобы расширить ответ от 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, оно не будет потеряно (так как оно всегда устанавливается для экземпляра).

Помогает ли это?

0 голосов
/ 20 января 2010

Странно, обе темы (пользовательский MKAnnotationView и режим карты) не связаны друг с другом.

То, как вы заменяете контакты, кажется странным (setImage?), "Классический" способ - реализовать

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation

и верните свой пользовательский вид аннотации в ваш делегат для выполнения протокола MKMapViewDelegate.

...