Ответ 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 см. Настроить MKnnotation Callout View? для нескольких параметров для настройки выносок.