Как создать пользовательский MKAnnotationView и пользовательский заголовок и подзаголовок аннотации

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

1 ответ

Решение

Чтобы создать пользовательский вид аннотации (замена стандартного штифта), вы можете просто установить image собственность MKAnnotationView в viewForAnnotation метод:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]])
    {
        return nil;
    }
    else if ([annotation isKindOfClass:[YourAnnotationClassHere class]]) // use whatever annotation class you used when creating the annotation
    {
        static NSString * const identifier = @"MyCustomAnnotation";

        MKAnnotationView* annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];

        if (annotationView)
        {
            annotationView.annotation = annotation;
        }
        else
        {
            annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation
                                                          reuseIdentifier:identifier];
        }

        annotationView.canShowCallout = NO; // set to YES if using customized rendition of standard callout; set to NO if creating your own callout from scratch
        annotationView.image = [UIImage imageNamed:@"your-image-here.png"];

        return annotationView;
    }
    return nil;
}

Вы также можете настроить centerOffset свойство, чтобы булавка выстроилась точно так, как вы хотите.

Что касается настройки выноски, самый простой подход - это указать leftCalloutAccessoryView, rightCalloutAccessoryView и / или detailCalloutAccessoryView, Это дает вам удивительную степень контроля, добавляя всевозможные изображения, метки и т. Д.

Если вы хотите сделать радикальный редизайн выноски, вы можете иметь viewForAnnotation задавать canShowCallout в NO а затем ответить на setSelected в вашем собственном представлении аннотации, чтобы показать свою собственную выноску. Находясь в Swift, см. Настройка просмотра выноски MKAnnotation? для нескольких вариантов настройки выносок.

Другие вопросы по тегам