我正在尝试为地图上的注释创建自定义注记视图。我通过调整协议MKMapViewDelegate
并覆盖函数mapView:viewForAnnotation:
来做到这一点。一切正常,唯一的问题是我也showsUserLocation
设置为TRUE
,这意味着我在mapView:viewForAnnotation:
方法中获得的一个“注释”属于{{1}类}。
我不希望userlocation注释具有我的自定义注释视图,我希望那个显示默认的userlocation注释视图!如何返回用户位置的默认用户位置注释视图或将其从注释中排除(来自MKUserLocation
)?
我试图在mapView:viewForAnnotation:
方法中捕获UserLocation,但我不知道该返回什么! (在此示例中,我将返回标准MKAnnotationView,但这看起来不像默认的UserLocation Annotation ( 显然 )。)< / p>
mapView:viewForAnnotation:
答案 0 :(得分:8)
显示用户位置的默认注释,只返回nil
这个案例,我这样做了:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// use your custom annotation
if ([annotation isKindOfClass:[MyAnnotationClass class]]) {
...
return annotationView;
}
// use default annotation
return nil;
}
答案 1 :(得分:2)
在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;
}
答案 2 :(得分:1)
创建自定义AnnotationView
:
#import <MapKit/MapKit.h>
@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
//使用注释在相关的#import "AnnotationView.h"
:
.m file
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
。
答案 3 :(得分:0)
如果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
}
}