¿Cómo se muestra UIPopoverView como una anotación en la vista del mapa? (iPad)

En la aplicación de mapas en el iPad, cuando toca un alfiler obtiene una anotación normal con una “i” en lugar de un indicador de divulgación. Un nuevo toque en la “i” revela un controlador de visualización Popover como este.

mapa ejemplo popover

¿Hay alguna manera de lograr esto fácilmente?

Primero agregue una anotación al mapa y, en el método viewForAnnotation , establezca el rightCalloutAccessoryView en un botón de tipo, por ejemplo, UIButtonTypeDetailDisclosure (no creo que el botón azul de información esté disponible de manera predeterminada).

Al presionar el botón, se llamará al método de delegación calloutAccessoryControlTapped . En este método, deseleccione la anotación y muestre su popover. Por ejemplo:

 - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { [mapView deselectAnnotation:view.annotation animated:YES]; YourContentViewController *ycvc = [[YourContentViewController alloc] init... UIPopoverController *poc = [[UIPopoverController alloc] initWithContentViewController:ycvc]; [ycvc release]; //hold ref to popover in an ivar self.annotationPopoverController = poc; //size as needed poc.popoverContentSize = CGSizeMake(320, 400); //show the popover next to the annotation view (pin) [poc presentPopoverFromRect:view.bounds inView:view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; [poc release]; } 

YourContentViewController es una subclase de UIViewController que puede codificar como cualquier otro controlador de vista. La aplicación Mapas parece que tiene UITableView en el contenido.

Parece que para tener una mejor posición para el popover debes presentarlo desde este rect:

 CGPoint lc_point = [mapView convertCoordinate:view.annotation.coordinate toPointToView:mapView]; CGRect lc_frame = CGRectMake(lc_point.x,lc_point.y-view.frame.size.height,0,0); 

Puede usar una biblioteca como la Leyenda animada de Gordon Hughes. Desafortunadamente, todavía no funciona a la perfección en iOS 6 (las llamadas aparecen de forma extraña).

Aquí está iOS 5:

enter image description here

Mi requisito era similar a este problema, pero también era necesario para permitirles a los usuarios interactuar con el mapa (panorámica y zoom) mientras se muestra la leyenda. Para esto he creado este proyecto github: https://github.com/crarau/mapkit-custom-callout