mkmapview MKUserLocation AnnotationView

我正在尝试为地图上的注释创建自定义注记视图。 我这样做是通过调整协议MKMapViewDelegate并覆盖函数mapView:viewForAnnotation: . 一切正常,唯一的问题是我也将showsUserLocation设置为TRUE ,这意味着我在mapView:viewForAnnotation:获得的一个“注释” mapView:viewForAnnotation:方法属于类MKUserLocation

我不希望userlocation注释具有我的自定义注释视图,我希望那个显示默认的userlocation注释视图! 如何返回用户位置的默认用户位置注释视图或将其从注释( mapView:viewForAnnotation: :)中排除?

我试图在mapView:viewForAnnotation:方法中捕获UserLocation,但我不知道要返回什么! ( 在这个例子中,我正在返回一个标准的MKAnnotationView,但这看起来不像默认的UserLocation Annotation显然 )。)

  if (![[annotation class] isEqual:[MKUserLocation class]]) { MKAnnotationView *view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"customAnnotation"]; // edit the custom view return view; } MKAnnotationView *view = [[MKAnnotationView alloc] init]; return view; 

为了显示用户位置的默认注释,只返回nil ,我就是这样做的:

 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation { // use your custom annotation if ([annotation isKindOfClass:[MyAnnotationClass class]]) { ... return annotationView; } // use default annotation return nil; } 

在viewForAnnotation方法中编写这段代码。 var’map’是MKMapview的出口;

  - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id < MKAnnotation >)annotation { //Annoation View for current Location if(map.userLocation != annotation) { UIImage *image = [UIImage imageNamed:@"image.png"]; annotation.image = image; return annotation; } //Annotation View for current location return nil; } 

创建自定义AnnotationView

 #import  @interface AnnotationView : MKPlacemark @property (nonatomic, readwrite, assign) CLLocationCoordinate2D coordinate; @property (nonatomic, strong) NSString *title; @property (nonatomic, strong) NSString *subtitle; // you can put here any controllers that you want. (such like UIImage, UIView,...etc) @end 

并在.m file

 #import "AnnotationView.h" @implementation AnnotationView - (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate addressDictionary:(NSDictionary *)addressDictionary { if ((self = [super initWithCoordinate:coordinate addressDictionary:addressDictionary])) { self.coordinate = coordinate; } return self; } @end 

//使用注释在相关的.m file添加#import "AnnotationView.h"

 CLLocationCoordinate2D pCoordinate ; pCoordinate.latitude = LatValue; pCoordinate.longitude = LanValue; // Create Obj Of AnnotationView class AnnotationView *annotation = [[AnnotationView alloc] initWithCoordinate:pCoordinate addressDictionary:nil] ; annotation.title = @"I m Here"; annotation.subtitle = @"This is Sub Tiitle"; [self.mapView addAnnotation:annotation]; 

以上是如何创建AnnotationView简单示例。

如果annotation参数中的对象是MKUserLocation类的实例,则可以提供自定义视图来表示用户的位置。 要使用默认系统视图显示用户的位置,请返回nil。 如果未实现此方法,或者如果从实现中返回除用户位置注释之外的注释的nil,则地图视图将使用标准引脚注释视图。

  - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id < MKAnnotation >)annotation { // if it's the user location, just return nil or custom annotation view. if ([annotation isKindOfClass:[MKUserLocation class]]){ return nil; } else { //return other annotations } }