MKPinAnnotationView не устанавливает пользовательское изображение

Мне нужно установить собственное изображение для разных контактов. С помощью моего кода я могу установить собственный цвет для каждого из них, но когда я пытаюсь установить собственное изображение вместо цветов, это не работает.

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(MyAnnotation *)annotation {

static NSString *identifier = @"MyLocation";

if ([annotation isKindOfClass:[MyAnnotation class]]) {

    MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[self.myMap dequeueReusableAnnotationViewWithIdentifier:identifier];

    if (annotationView == nil) {

        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];

    } else {

        annotationView.annotation = annotation;

    }

    annotationView.enabled = YES;
    annotationView.canShowCallout = NO;

    NSString *stringType = [NSString stringWithFormat:@"%@", [(MyAnnotation *)annotationView.annotation stringType]];

    if ([stringType isEqualToString:@"0"]) {

        annotationView.image = [UIImage imageNamed:@"IconUserCerco.png"];
        //annotationView.pinColor = MKPinAnnotationColorGreen;

    } else if ([stringType isEqualToString:@"1"]) {

        annotationView.image = [UIImage imageNamed:@"IconUserDefault.png"];
        //annotationView.pinColor = MKPinAnnotationColorPurple;

    } else if ([stringType isEqualToString:@"2"]) {

        annotationView.image = [UIImage imageNamed:@"PinUniversity.png"];
        //annotationView.pinColor = MKPinAnnotationColorRed;

    }

    return annotationView;

}

return nil;

}

Любая помощь будет высоко ценится. Заранее спасибо.


person Armando    schedule 11.02.2016    source источник
comment
Возможный дубликат пользовательского изображения MKPinAnnotationView заменен булавкой с анимацией бросить   -  person m4tt1mus    schedule 06.05.2016


Ответы (2)


Вместо MKPinAnnotationView можно использовать MKAnnotationView? Вам придется использовать следующее вместо MKPinAnnotationView

MKAnnotationView *annotationView = [self.myMap dequeueReusableAnnotationViewWithIdentifier:identifier];

iOS 9.0 и выше рекомендуется использовать MKAnnotationView. Это должно решить вашу проблему.

person Vishnu gondlekar    schedule 11.02.2016

Вот как это выглядит в iOS 11.x Swift 4. Обратите внимание, что это не сработает, если вы совершите ту же ошибку, что и я, используя MKPinAnnotationView. Это сделает булавку, и вы не сможете изменить изображение за ней.

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    if annotation is MKUserLocation  {
        return nil
    }

    let reuseId = "pin"
    var pav:MKAnnotationView?
    if (pav == nil)
    {
        pav = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        pav?.isDraggable = true
        pav?.canShowCallout = true
        pav?.image = UIImage(named: "WIP.png")
        pav?.calloutOffset = CGPoint(x: -8, y: 0)
        pav?.autoresizesSubviews = true
//      pav?.rightCalloutAccessoryView = UIButton(type: .roundedRect)
        pav?.leftCalloutAccessoryView = UIButton(type: .contactAdd)
    }
    else
    {
        pav?.annotation = annotation;
    }

    return pav;
}
person user3069232    schedule 28.03.2018