我创建了一个注释,我将其添加到MKMapView中。如何使用自定义图像而不是标准红色图钉?
@interface AddressAnnotation : NSObject<MKAnnotation> {
CLLocationCoordinate2D coordinate;
NSString *title;
NSString *subtitle;
MKPinAnnotationColor pinColor;
}
@property (nonatomic,retain) NSString *title;
@property (nonatomic,retain) NSString *subtitle;
@property (nonatomic, assign) MKPinAnnotationColor pinColor;
@end
答案 0 :(得分:18)
MKMapView从其委托方法mapView:viewForAnnotation:获取其引脚视图所以你必须:
将您的控制器设置为代理
@interface MapViewController : UIViewController <MKMapViewDelegate>
使用委托协议标记接口。这让你在Interface Builder(IB)中将控制器设置为MKMapView的委托。打开包含地图的.xib文件,右键单击MKMapView,然后将delegate
插座拖到控制器上。
如果您更喜欢使用代码而不是IB,请在控制器的viewDidLoad方法中添加self.yourMapView.delegate=self;
。结果将是相同的。
实施mapView:viewForAnnotation:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// this part is boilerplate code used to create or reuse a pin annotation
static NSString *viewId = @"MKPinAnnotationView";
MKPinAnnotationView *annotationView = (MKPinAnnotationView*)
[self.mapView dequeueReusableAnnotationViewWithIdentifier:viewId];
if (annotationView == nil) {
annotationView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:viewId] autorelease];
}
// set your custom image
annotationView.image = [UIImage imageNamed:@"emoji-ghost.png"];
return annotationView;
}
答案 1 :(得分:1)
覆盖mapView:viewForAnnotation:
委托方法。如果annotation
参数指向您的某个自定义注释,请返回符合您自己喜好的自定义视图。
答案 2 :(得分:0)
要设置自定义图片而不是标准MKPinAnnotationView
,唯一的方法是使用MKAnnotationView
功能- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
。这是一个例子:
- (nullable MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}
static NSString *identifier = @"Annotation";
MKAnnotationView *aView = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (!aView) {
aView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
aView.image = [UIImage imageNamed:@"Untitled1.png"];
aView.canShowCallout = YES;
aView.draggable = YES;
} else {
aView.annotation = annotation;
}
return pin;
}
对于aView.image
值您可以设置自己的图像。并且还要查看MKAnnotationView
类引用以便更好地处理它。