Пользовательское изображение для MKAnnotation - PullRequest
10 голосов
/ 18 сентября 2011

Я создал аннотацию, которую добавляю в MKMapView. Как мне получить собственное изображение вместо стандартного красного штифта?

@interface AddressAnnotation : NSObject<MKAnnotation> {
    CLLocationCoordinate2D coordinate;
    NSString *title;
    NSString *subtitle;
    MKPinAnnotationColor pinColor;
}
@property (nonatomic,retain) NSString *title;
@property (nonatomic,retain) NSString *subtitle;
@property (nonatomic, assign) MKPinAnnotationColor pinColor;
@end

Ответы [ 3 ]

18 голосов
/ 18 сентября 2011

MKMapView получает свои виды выводов из метода делегата mapView: viewForAnnotation: Так что вам необходимо:

  1. Установить контроллер представления в качестве делегата карты.
  2. Реализация mapView: viewForAnnotation: в вашем контроллере.

Установите ваш контроллер в качестве делегата

@interface MapViewController : UIViewController <MKMapViewDelegate>

Отметьте интерфейс с помощью протокола делегата.Это позволяет вам установить контроллер как делегат MKMapView в Интерфейсном Разработчике (IB).Откройте файл .xib, содержащий вашу карту, щелкните правой кнопкой мыши MKMapView и перетащите выход delegate на свой контроллер.
Если вы предпочитаете использовать код вместо IB, добавьте self.yourMapView.delegate=self; в методе viewDidLoad контроллера.Результат будет таким же.

Реализация mapView: viewForAnnotation:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    // this part is boilerplate code used to create or reuse a pin annotation
    static NSString *viewId = @"MKPinAnnotationView";
    MKPinAnnotationView *annotationView = (MKPinAnnotationView*) 
        [self.mapView dequeueReusableAnnotationViewWithIdentifier:viewId];
    if (annotationView == nil) {
        annotationView = [[[MKPinAnnotationView alloc] 
            initWithAnnotation:annotation reuseIdentifier:viewId] autorelease];
    }
    // set your custom image
    annotationView.image = [UIImage imageNamed:@"emoji-ghost.png"];
    return annotationView;
}
1 голос
/ 18 сентября 2011

Переопределить метод делегата mapView:viewForAnnotation:. Если параметр annotation указывает на одну из ваших пользовательских аннотаций, верните пользовательский вид, который вам нравится.

0 голосов
/ 15 июня 2016

Чтобы установить пользовательское изображение вместо стандартного MKPinAnnotationView, единственный способ сделать это - использовать MKAnnotationView с функцией - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation.Вот пример:

- (nullable MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {

     if ([annotation isKindOfClass:[MKUserLocation class]]) {
                return  nil;
     }

     static NSString *identifier = @"Annotation";

     MKAnnotationView *aView = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];

     if (!aView) {
          aView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
          aView.image = [UIImage imageNamed:@"Untitled1.png"];
          aView.canShowCallout = YES;
          aView.draggable = YES;
     } else {
          aView.annotation = annotation;
     }

     return pin;
}

Для значения aView.image Вы можете установить собственное изображение.А также посмотрите на MKAnnotationView ссылку на класс, чтобы лучше справиться с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...