3

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

我不希望用户位置注释有我的自定义注释视图,我希望那个显示默认的用户位置注释视图!如何返回用户位置的默认用户位置注释视图或将其从注释中排除(进来的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;
4

4 回答 4

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;
}
于 2013-03-19T09:06:41.100 回答
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;

    }
于 2013-03-19T09:04:32.060 回答
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

于 2013-03-19T09:05:29.877 回答
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
       }

    }
于 2013-03-20T00:41:12.443 回答