iphone objective-c cocoa-touch mkmapview

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)

Se ve así:


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 ".