iphone - ¿Agregar rápidamente un solo pin a MKMapView?
objective-c cocoa-touch (6)
Dado que desea animar la caída, deberá implementar viewForAnnotation
como lo ha hecho porque esa propiedad es NO
por defecto.
Si no necesita animar el drop, puede eliminar por completo la implementación del método viewForAnnotation
y desactivar la llamada, establecer el title
la anotación en cero o en blanco al agregar la anotación.
Si necesita la animación de colocar un alfiler y también está mostrando la ubicación del usuario (punto azul), también deberá buscar MKUserLocation
en viewForAnnotation
y devolver nil
.
De lo contrario, podría eliminar todo el método viewForAnnotation
y el pin rojo predeterminado aparecerá sin animación, la llamada aparecerá si el title
no está en blanco y la ubicación del usuario aparecerá como un punto azul.
Tengo una coordenada de GPS (latitud, longitud) y rápidamente quiero colocar un pin único en un MKMapView mostrando esa posición. Todo funciona bien, pero como solo necesito un pin único sin rótulos, ¿hay alguna manera más rápida de hacerlo o lo que tengo debajo de lo que hay que hacer?
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id < MKAnnotation >)annotation {
MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"DETAILPIN_ID"];
[pinView setAnimatesDrop:YES];
[pinView setCanShowCallout:NO];
return pinView;
}
NB: No necesito verificar las vistas de anotaciones reutilizables, ya que solo estoy usando el pin para mostrar una posición en una vista de detalle (que se destruye y vuelve a crear la próxima vez que se solicita una vista detallada).
El método más simple y sencillo para soltar un pin y mostrar la ubicación actual en la vista de mapa es simplemente agregar este código en su método viewDidLoad. (Suponiendo que la ubicación actual del usuario ya haya sido recuperada por usted).
NSString *display_coordinates=[NSString stringWithFormat:@"Latitude is %f and Longitude is %f",coordinate.longitude,coordinate.latitude];
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
[annotation setCoordinate:coordinate];
[annotation setTitle:@"Click Labs"];
[annotation setSubtitle:display_coordinates];
[mapView addAnnotation:annotation];
En lugar de usar el -mapView:viewForAnnotation:
simplemente coloque el código de una MKPointAnnotation
en su método -viewDidLoad
. No animará la caída, pero es muy fácil.
// Place a single pin
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
[annotation setCoordinate:centerCoordinate];
[annotation setTitle:@"Title"]; //You can set the subtitle too
[self.mapView addAnnotation:annotation];
Versión Swift:
let annotation = MKPointAnnotation()
let centerCoordinate = CLLocationCoordinate2D(latitude: 41, longitude:29)
annotation.coordinate = centerCoordinate
annotation.title = "Title"
mapView.addAnnotation(annotation)
Puede establecer el punto y también la región de esta manera:
CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(lat, lon);
MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1);
MKCoordinateRegion region = {coord, span};
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
[annotation setCoordinate:coord];
[self.staticMapView setRegion:region];
[self.staticMapView addAnnotation:annotation];
Simplemente puede agregarlo como:
mapView.mapType = MKMapType.standard
let location = CLLocationCoordinate2D(latitude: 23.0225,longitude: 72.5714)
let span = MKCoordinateSpanMake(0.05, 0.05)
let region = MKCoordinateRegion(center: location, span: span)
mapView.setRegion(region, animated: true)
let annotation = MKPointAnnotation()
annotation.coordinate = location
annotation.title = "Javed Multani"
annotation.subtitle = "Surat, India"
mapView.addAnnotation(annotation)
Swift versión de añadir pin en MKMapView:
func addPin() {
let annotation = MKPointAnnotation()
let centerCoordinate = CLLocationCoordinate2D(latitude: 20.836864, longitude:-156.874269)
annotation.coordinate = centerCoordinate
annotation.title = "Lanai, Hawaii"
mapView.addAnnotation(annotation)
}
Versión rápida de enfocar una región o pin
func focusMapView() {
let mapCenter = CLLocationCoordinate2DMake(20.836864, -156.874269)
let span = MKCoordinateSpanMake(0.1, 0.1)
let region = MKCoordinateRegionMake(mapCenter, span)
mapView.region = region
}
Para obtener más información, visite " Cargar MKMapView usando Swift ".