在MKMapView上显示自定义注释视图

时间:2012-09-12 05:40:30

标签: iphone mkmapview mkannotationview

我正在制作地图应用程序。我完成了在某些条件下获取位置,在地图视图上显示注释并显示我的自定义标注气泡。

我的要求是显示注释引脚,如下所示:

  • 带圆角的图像以显示注释
  • 在注释的右上角会有一个红色徽章的视图。
  • 需要访问该红色徽章视图并以某些方法设置文本。

现在我知道我可以将Image设置为注释视图并使其成为圆角,如下所示:

pinView.image = [UIImage imageNamed:@"annotationImage"];
[pinView.layer setCornerRadius:8.0];
[pinView setClipsToBounds:YES];

此处pinView是一个AnnotationView。

如果我可以创建自定义视图并将其分配到图钉视图,请告诉我,这样我就可以获得红色徽章并设置图像。

更新

我尝试了很多东西,并成功地提出了观点。但问题是如果我在地图上使用MKAnnotationView对象,我无法点击它或在其上调用手势识别器。如果我使用MKPinAnnotationView而不是我能够调用didSelected方法或添加手势识别器,但我无法在其上设置图像,因为它是Pin Annotation。 如果可能,请告诉我。

提前致谢。

1 个答案:

答案 0 :(得分:3)

您需要将班级设为MKMapViewDelegate并填写此方法:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
 CustomMapAnnotationView *annotationView = nil;

 pinView.image = [UIImage imageNamed:@"annotationImage"];
 [pinView.layer setCornerRadius:8.0];
 [pinView setClipsToBounds:YES];

 NSString* identifier = @"CustomMapAnnotation";
 CustomMapAnnotationView *newAnnotationView = (CustomMapAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier];

 if(nil == newAnnotationView) {
    newAnnotationView = [[[CustomMapAnnotationView alloc] initWithAnnotation: pinView reuseIdentifier:identifier] autorelease];
 }

 annotationView = newAnnotationView;
 [annotationView setEnabled:YES];
 [annotationView setCanShowCallout:YES];

 return annotationView;
}

因此,您可以返回MKAnnotationView的自定义类,子类,并且可以立即将徽章添加到自定义视图中。