2012-03-27 19 views
51

Tengo una coordenada de GPS (latitud, longitud) y rápidamente quiero colocar un solo pin 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?¿Agregar rápidamente un solo pin a MKMapView?

- (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 para comprobar las vistas de anotación reutilizables, ya que sólo 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 de detalle) .

Respuesta

4

Dado que desea animar la caída, deberá implementar viewForAnnotation como lo ha hecho porque esa propiedad es NO de forma predeterminada.

Si no necesita animar la colocación, puede eliminar completamente la implementación del método viewForAnnotation y desactivar la llamada, establecer el title de la anotación en cero o en blanco al agregar la anotación.

Si necesita la animación de colocar el pin y también está mostrando la ubicación del usuario (punto azul), también deberá verificar MKUserLocation en viewForAnnotation y devolver nil.

De lo contrario, podría eliminar el método completo viewForAnnotation y el pin rojo predeterminado aparecerá sin animación, la llamada mostrará si title no está en blanco, y la ubicación del usuario se mostrará como un punto azul.

+0

Eso es un buen punto, yo trato de no implementar viewForAnnotation pero no me había dado cuenta de que tanto mi título y subtítulo eran apuntando a NSStrings.No estoy excesivamente apegado a la caída de pin, pero creo que ahora lo dejaré como está. Muchas gracias por su respuesta, muy útil y ciertamente algo que usaré en el futuro. – fuzzygoat

111

En lugar de utilizar el método -mapView:viewForAnnotation:, sólo hay que poner el código de un 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) 
+2

¿es posible animar la caída de una MKPointAnnotation? – VeganKid

+0

No se puede animar fácilmente la caída. Si desea la animación, use el método de delegado 'mapView: viewForAnnotation:'. –

6

El método más fácil y sencilla a la caída de un alfiler y la visualización de la ubicación actual en el mapa es simplemente agregar este código en su método de 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]; 
32

Puede configurar el punto y también la región como esta:

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]; 
+0

thanks.its working –

+0

Funciona bien ..! Gracias.. – Gati

3

versión Swift del pasador complemento 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 Swift de enfocar una región o un alfiler

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 detalles s visita "Load MKMapView using Swift".

0

Simplemente puedes añadir 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 como: enter image description here

Cuestiones relacionadas