我试图在用户点击叠加层时显示标注。然后,标注基于所选叠加层在其上具有标题。我希望仅当用户点击叠加层时才会显示注释。但问题是叠加层无法识别水龙头,所有注释在开始时都可见。我希望他们隐藏起来。
这是一个类似的问题。但我无法弄清楚。 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:?????];
}
答案 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];
}
祝这段代码有用