Как создать пользовательский 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? для нескольких вариантов настройки выносок.