ios xcode location mkannotation mkannotationview

Cómo evitar que el método viewForAnnotation anule la baliza azul de la ubicación de usuario predeterminada en iOS



xcode location (1)

Ahora mismo estoy llenando una vista de mapa con anotaciones, y también visualizo la ubicación actual del usuario. Con el método viewForAnnotation, anula todas las anotaciones con el pin rojo predeterminado, pero quiero devolver las vistas de las otras anotaciones, pero mantener la ubicación del usuario como la baliza azul predeterminada. ¿Hay alguna forma de hacer esto simplemente o tengo que crear una nueva vista de anotación y devolver la correcta en función de la anotación?

Ahora mismo tengo algo como:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { if (annotation.coordinate == locationManager.location.coordinate) { return nil; }else { MKAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Beacon"]; // Button UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; button.frame = CGRectMake(0, 0, 23, 23); annotationView.rightCalloutAccessoryView = button; annotationView.canShowCallout = YES; return annotationView; } }

Pero no puedo igualar los dos porque no puedo sacar la propiedad de coordenadas del argumento de anotación.

¿Alguien sabe alguna solución a esto?


Echa un vistazo a la documentación aquí:

http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapViewDelegate_Protocol/MKMapViewDelegate/MKMapViewDelegate.html

Como dice:

Si el objeto en el parámetro de anotación es una instancia de la clase MKUserLocation , puede proporcionar una vista personalizada para indicar la ubicación del usuario. Para mostrar la ubicación del usuario utilizando la vista del sistema predeterminada, devuelva nil.

Así que puedes agregar un condicional para verificar esto:

if([annotation isKindOfClass: [MKUserLocation class]]) { return nil; }