如何创建自定义MKAnnotationView和自定义注释标题和副标题

时间:2013-04-27 13:35:58

标签: ios map mkannotation iphone-5 mkannotationview

enter image description here

我需要在MKMapView上创建上面的Annotation视图。我能够创建自定义注释视图,但在点击注释时,视图需要打开带有大文本的图像,我无法创建那个。请提供一些链接或方法来完成这项任务。

1 个答案:

答案 0 :(得分:37)

要创建自定义注释视图(替换标准图钉),您只需在image方法中设置MKAnnotationViewviewForAnnotation属性:

- (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属性以使引脚按照您希望的方式排列。

关于标注的自定义,最简单的方法是指定leftCalloutAccessoryViewrightCalloutAccessoryView和/或detailCalloutAccessoryView。这为您提供了惊人的控制程度,添加了各种图像,标签等。

如果您想彻底重新设计标注,可以viewForAnnotationcanShowCallout设置为NO,然后在自定义注释视图中回复setSelected显示你自己的标注。在Swift中,请参阅Customize MKAnnotation Callout View?了解自定义标注的几个选项。