【问题标题】:mkmapview MKUserLocation AnnotationViewmkmapview MKUserLocation AnnotationView
【发布时间】:2013-03-19 08:47:15
【问题描述】:

我正在尝试为我的地图上的注释创建自定义注释视图。我通过调整协议MKMapViewDelegate 并覆盖函数mapView:viewForAnnotation: 来做到这一点。一切正常,唯一的问题是我还将showsUserLocation 设置为TRUE,这意味着我在mapView:viewForAnnotation: 方法中获得的一个“注释”属于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;

【问题讨论】:

  • 请编写您在 mapView:viewForAnnotation 中实现的代码

标签: ios objective-c mkmapview mkannotation


【解决方案1】:

要显示用户位置的默认注释,只需在这种情况下返回 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;
}

【讨论】:

  • 答对了三次,但这是最中肯的;只为默认注释返回 nil 。谢谢!
【解决方案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;

    }

【讨论】:

    【解决方案3】:

    创建自定义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
    

    // 使用注解在你的相关.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的简单示例。

    【讨论】:

      【解决方案4】:

      如果 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
             }
      
          }
      

      【讨论】:

        猜你喜欢
        • 2012-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多