2

我想将带有叠加层的开始和结束图像放在 iPhone/iPad 应用程序中。我有起点和终点纬度和经度值,想在起点和终点之间绘制叠加层,并将起点图像放在起点上,将终点图像放在终点上。

我用谷歌搜索,但我发现 MapKit 获取一张图像并将其设置在起点和终点,找不到第二张图像的任何帮助。

annotationView.image=[UIImage imageNamed:@"parkingIcon.png"];

它只为起点和终点设置一个图像。但我想为这两点放置不同的图像。

请帮忙。

4

3 回答 3

8

我明白了......感谢所有试图帮助我的人。完整的解决方案是

创建一个类

 @interface MyAnnotationClass : NSObject <MKAnnotation> {
        NSString *_name;
        NSString *_description;
        CLLocationCoordinate2D _coordinate;


    }
    @property (nonatomic, retain) NSString *name;
    @property (nonatomic, retain) NSString *description;
    @property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

    -(id) initWithCoordinate:(CLLocationCoordinate2D) coordinate;

ViewDidLoad 方法代码:

mapView.delegate = self;
    //Initialize annotation
    MyAnnotationClass *commuterLotAnnotation=[[MyAnnotationClass alloc] initWithCoordinate:CLLocationCoordinate2DMake( 39.047752, -76.850388)];
    commuterLotAnnotation.name = @"1";
    MyAnnotationClass *overflowLotAnnotation=[[MyAnnotationClass alloc] initWithCoordinate:CLLocationCoordinate2DMake(  39.047958, -76.852520)];
    overflowLotAnnotation.name = @"2";

    //Add them to array
    self.myAnnotations=[NSArray arrayWithObjects:commuterLotAnnotation, overflowLotAnnotation, nil];

    //Release the annotations now that they've been added to the array
    [commuterLotAnnotation release];
    [overflowLotAnnotation release];

    //add array of annotations to map
    [mapView addAnnotations:_myAnnotations];

viewFor注解代码:

-(MKAnnotationView *)mapView:(MKMapView *)MapView viewForAnnotation:(id<MKAnnotation>)annotation{
    static NSString *parkingAnnotationIdentifier=@"ParkingAnnotationIdentifier";

    if([annotation isKindOfClass:[MyAnnotationClass class]]){

        //Try to get an unused annotation, similar to uitableviewcells
        MKAnnotationView *annotationView=[MapView dequeueReusableAnnotationViewWithIdentifier:parkingAnnotationIdentifier];
        //If one isn't available, create a new one
        if(!annotationView){
            annotationView=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:parkingAnnotationIdentifier];
            if([((MyAnnotationClass *)annotation).name isEqualToString: @"1"]){
                annotationView.image=[UIImage imageNamed:@"passenger.png"];
            }
            else if([((MyAnnotationClass *)annotation).name isEqualToString: @"2"]){
                annotationView.image=[UIImage imageNamed:@"place.png"];
            }                                   
        }
        return annotationView;
    }
    return nil;
}

这就是您可以为 MapKit 上的每个点添加单独图像的方法。

于 2012-05-17T11:20:09.963 回答
0

您必须使用-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation;MKAnnotation 委托方法

它允许您在地图上设置给定的注释。

每个注释都会返回此方法,您只需找到结束和开始注释并将图像设置为它

于 2012-05-14T14:32:34.440 回答
0

首先,您必须实现 MKMapViewDelegate 协议并将委托类设置为您的地图。

在 MKMapView 委托中,声明方法:

- (MKAnnotationView *)mapView:(id)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    if (annotation == [mapView userLocation]) // The user's blue point : no customisation.
        return nil;

    MKAnnotationView * annView = [mapView dequeueReusableAnnotationViewWithIdentifier:/* your specific identifier */];
    if (annView == nil) {
        annView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:/* your specific identifier */] autorelease];
    }
    annView.image = /* your image */;
    return annView
}

但是您必须检测注释是开始注释还是结束注释。您可以设置特定标题以轻松检索它(如@“start”)或通过添加区分属性来子类化您的 MKAnnotations。

于 2012-05-14T14:57:10.883 回答