2

ユーザーがオーバーレイをタップしたときにコールアウトを表示しようとしています。コールアウトには、選択したオーバーレイに基づいたタイトルが付けられます。ユーザーがオーバーレイをタップしたときにのみ注釈が表示されるようにしたい。ただし、問題は、オーバーレイがタップを認識せず、開始時にすべての注釈が表示されることです。隠して欲しい。

同様の質問がここにあります。しかし、私はそれを理解することはできません。 オーバーレイをタップしたときにコールアウトを表示する

オーバーレイ調整はサーバーからダウンロードされ、次のように追加されます。

 //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:?????];
}
4

1 に答える 1

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];



}

このコードがお役に立てば幸い

于 2012-02-17T12:19:16.177 に答える