点击叠加时显示标注和引脚

时间:2011-12-14 02:29:27

标签: mapkit mkoverlay

我试图在用户点击叠加层时显示标注。然后,标注基于所选叠加层在其上具有标题。我希望仅当用户点击叠加层时才会显示注释。但问题是叠加层无法识别水龙头,所有注释在开始时都可见。我希望他们隐藏起来。

这是一个类似的问题。但我无法弄清楚。 Show callout when tapping overlay

叠加协调从服务器下载并添加如下:

 //Add a polygon
        MKPolygon *rect=[MKPolygon polygonWithCoordinates:parkingCords count:5];
        [self.mapView addOverlay:rect];
        [self.mapView addAnnotation:rect];

每个叠加层现在都有一个注释。

ViewForAnnotation

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{

...
 else if([annotation isKindOfClass:[MKPolygon class]]){
        NSLog(@"MKPOLYGON CLASS");
        static NSString *identifier3 = @"else";  
        MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier3];


        if (annotationView == nil) {
            annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier3];
            annotationView.enabled = YES;
            annotationView.canShowCallout = YES;

        } else {
            annotationView.annotation = annotation;

        } 
...
}

viewForOverlay

 -(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay{
        if([overlay isKindOfClass:[MKPolygon class]]){
            MKPolygonView *view = [[MKPolygonView alloc] initWithOverlay:overlay];
            view.lineWidth=1;
            view.strokeColor=[UIColor blueColor];
            view.fillColor=[[UIColor blueColor] colorWithAlphaComponent:0.3];

            recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(overlayTapped)]; 
            recognizer.delegate=self;
            [view addGestureRecognizer:recognizer];
            [recognizer release];

            return view;
        }
        return nil;
    }


-(void)overlayTapped{

    NSLog(@"overlay tapped");
    //[self.mapView setSelectedAnnotations:?????];
}

1 个答案:

答案 0 :(得分:0)

我用这段代码解决了:

确定跨区域后

 CLLocation *userLoc = myMapView.userLocation.location;
    CLLocationCoordinate2D userCoordinate = userLoc.coordinate;
    NSLog(@"user latitude = %f",userCoordinate.latitude);
    NSLog(@"user longitude = %f",userCoordinate.longitude);
    myMapView.delegate=self;


    NSMutableArray* annotations=[[NSMutableArray alloc] init];

    //vallee
    CLLocationCoordinate2D theCoordinate1;
    theCoordinate1.latitude = 45.752453;
    theCoordinate1.longitude = 7.642313;
    //venezia
    CLLocationCoordinate2D theCoordinate2;
    theCoordinate2.latitude = 45.442793;
    theCoordinate2.longitude = 12.329691;
    //campione
    CLLocationCoordinate2D theCoordinate3;
    theCoordinate3.latitude = 45.971027;
    theCoordinate3.longitude = 8.971362;
    //sanremo
    CLLocationCoordinate2D theCoordinate4;
    theCoordinate4.latitude = 43.814910;
    theCoordinate4.longitude = 7.772050;

    myAnnotation* myAnnotation1=[[myAnnotation alloc] init];

    myAnnotation1.coordinate=theCoordinate1;
    myAnnotation1.title=@"Casinò della Vallée";
    myAnnotation1.subtitle=@"Saint Vincent";

    myAnnotation* myAnnotation2=[[myAnnotation alloc] init];

    myAnnotation2.coordinate=theCoordinate2;
    myAnnotation2.title=@"Casinò di Venezia";
    myAnnotation2.subtitle=@"Venezia";

    myAnnotation* myAnnotation3=[[myAnnotation alloc] init];

    myAnnotation3.coordinate=theCoordinate3;
    myAnnotation3.title=@"Casinò di Campione";
    myAnnotation3.subtitle=@"Campione";

    myAnnotation* myAnnotation4=[[myAnnotation alloc] init];

    myAnnotation4.coordinate=theCoordinate4;
    myAnnotation4.title=@"Casinò di Sanremo";
    myAnnotation4.subtitle=@"Sanremo";


    [myMapView addAnnotation:myAnnotation1];
    [myMapView addAnnotation:myAnnotation2];
    [myMapView addAnnotation:myAnnotation3];
    [myMapView addAnnotation:myAnnotation4];


    //[annotations addObject:myAnnotation1];
    [annotations addObject:myAnnotation2];
    [annotations addObject:myAnnotation3];
    [annotations addObject:myAnnotation4];


    NSLog(@"%d",[annotations count]);



}

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation {
    if (annotation == mapView.userLocation) {
        return nil;
    }
    MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"];
    pinView.pinColor = MKPinAnnotationColorGreen;
    pinView.canShowCallout = YES;
    pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    pinView.animatesDrop = YES;
    return pinView;
}

//disclosure button con indicazioni
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {

    [self.navigationController pushViewController:[[UIViewController alloc] init] animated:YES];

      //street from here to there

    NSString* addr = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", view.annotation.coordinate.latitude,view.annotation.coordinate.longitude];

        NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];  
        [[UIApplication sharedApplication] openURL:url];



}

祝这段代码有用