MKAnnotation的自定义图像

3sl*_*3sl 10 objective-c mapkit mkannotation mkannotationview

我创建了一个注释,我将其添加到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
Run Code Online (Sandbox Code Playgroud)

Jan*_*ano 18

MKMapView从其委托方法mapView获取其引脚视图:viewForAnnotation: 所以你必须:

  1. 将视图控制器设置为地图的委托.
  2. 在您的控制器中实现mapView:viewForAnnotation:

将您的控制器设置为委托

@interface MapViewController : UIViewController <MKMapViewDelegate>
Run Code Online (Sandbox Code Playgroud)

使用委托协议标记接口.这让你在Interface Builder(IB)中将控制器设置为MKMapView的委托.打开包含地图的.xib文件,右键单击MKMapView,然后将delegate插座拖到控制器上.
如果您更喜欢使用代码而不是IB,请添加self.yourMapView.delegate=self;控制器的viewDidLoad方法.结果将是相同的.

实现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;
}
Run Code Online (Sandbox Code Playgroud)


Ole*_*ann 1

重写mapView:viewForAnnotation:委托方法。如果annotation参数指向您的自定义注释之一,则返回一个符合您喜好的自定义视图。