No conozco ningún otro plantillas, pero eso no significa que no existan. :)
De todos modos, aquí está cómo crear los personalizados: Crea una nueva clase conforme al protocolo MKAnnotation
. Necesitará tener dos variables de instancia de tipo NSString*
llamadas title
y subtitle
y una de tipo CLLocationCoordinate2D
con una coordenada con nombre y un método de configuración apropiado (por ejemplo, propiedad). Esas cadenas se mostrarán en la llamada. En el delegado de su mapView, implemente el método -mapView:viewForAnnotation:
de forma similar a como implementaría el origen de datos para una UITableView. Es decir, quitar una anotación de una vista mediante un identificador, establecer las nuevas propiedades (por ejemplo, un botón de tipo UIButtonTypeDetailDisclosure para la vista de accesorios derecha). Deberá agregar una imagen para mostrar debajo del desplazamiento. Simplemente use la propiedad image
de su MKAnnotationView. El centro de la imagen personalizada de se colocará en la coordenadas que se especifican, por lo que es posible que desee dar un desplazamiento: aView.centerOffset = CGPointMake(0, -20)
Aquí hay un código de ejemplo:
- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id<MKAnnotation>) annotation {
// reuse a view, if one exists
MKAnnotationView *aView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"];
// create a new view else
if (!aView) {
aView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"];
}
// now configure the view
aView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[(UIButton*)aView.rightCalloutAccessoryView addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
aView.canShowCallout = YES;
aView.enabled = YES;
aView.image = [UIImage imageNamed:@"green_pin.png"];
aView.centerOffset = CGPointMake(0, -20);
return aView;
}
Gracias por la ayuda. También me preguntaba si hay una forma de mover una anotación una vez que se ha colocado en el mapa. – bubster
Simplemente configure la coordenada de su anotación al nuevo valor. MapView utiliza key-value-observing para ser notificado de cualquier cambio en sus anotaciones y hará el resto por usted. –