2011-01-29 7 views
6

He estado jugando con MKMapView y tratando de entender cómo funciona el sistema MKMapViewDelegate. Hasta ahora no he tenido suerte en conseguir llamar a didAddAnnotationViews cuando se agrega el marcador de ubicación actual.didAddAnnotationViews no funciona en MKMapView

He configurado el delegado de mi aplicación para implementar MKMapViewDelegate, tengo un Outlet en MapView en mi xib y he establecido que la propiedad de delegado de MapView sea propia, como en la instancia delegada de la aplicación. Implementé didAddAnnotationViews en el delegado de la aplicación que simplemente NSLogue todas las llamadas como se muestra a continuación. El mapa está configurado para mostrar la ubicación actual que lo hace y agrega la anotación de pin azul al inicio, pero por alguna razón didAddAnnotationViews no está siendo golpeado.

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views{ 
    NSLog(@"Annotation added!"); 
} 

¿Alguna idea de lo que me podría haber perdido?

Respuesta

3

mapView:didAddAnnotations: solo se llama en respuesta a addAnnotation: o addAnnotations:. El pin de ubicación de los usuarios no activará este método delegado.

+1

Gracias, ¿estás seguro de eso? Me pregunté si este era el caso, pero he seguido el tutorial de WhereAmI en el libro de Big Nerd Ranch sobre programación de iPhone y afirma claramente que se llamará a didAddAnnotationViews cuando se agregue el punto azul a la ubicación actual. De hecho, proporciona un bloque de código para usar en didAddAnnotationsView para configurar la región actual para hacer zoom en su ubicación actual. Eso parece una gran equivocación en la parte de los autores. – BenBtg

+0

En realidad, un poco de Google ha confirmado que tienes razón y Apple cambió el comportamiento en IOS 4.0. Aparentemente ahora necesito usar didUpdateUserLocation. – BenBtg

5

Me encontré con el mismo problema en BNR. Esto es lo que terminé usando:

// Tell MKMapView to zoom to current location when found 
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    NSLog(@"didUpdateUserLocation just got called!"); 

    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([userLocation coordinate], 250, 250); 
    [mapView setRegion:region animated:YES]; 
} 
0

Sólo quería confirmar que yo era capaz de conseguir este trabajo utilizando

- (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views 
{ 
    MKAnnotationView *annotationView = [views objectAtIndex:0]; 
    id <MKAnnotation> mp = [annotationView annotation]; 
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate], 250,250); 
    [mv setRegion:region animated:YES]; 
} 

Asegúrese de que está utilizando mapView.delegate = auto; o [mapView setDelegate: self];