showsUserLocation devuelve pin en lugar de punto azul en el simulador de iPhone
-
13-09-2019 - |
Pregunta
Este es mi -mapView:viewForAnnotation
Método que deja caer pines cuando creo vistas de anotación. Pero cuando me puse mapView.showsUserLocation = YES;
en -viewDidLoad
, obtengo un pin caído en el bucle infinito (esperado - en simulador) y no el punto azul normal.
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{
MKAnnotationView *anno = nil;
//create a pin annotation view
MKPinAnnotationView *pin=[[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"]autorelease];
[pin setPinColor:MKPinAnnotationColorRed];
pin.animatesDrop=YES;
pin.canShowCallout = YES;
pin.calloutOffset = CGPointMake(-5, 5);
anno = pin;
return anno;
}
¿Cómo puedo hacer que suelte los pasadores y mostrar el punto azul también?
Gracias
Solución
Realmente simple de arreglar, aunque no está seguro si esta es la forma correcta de hacerlo ...
if (annotation == mapView.userLocation){
return nil; //default to blue dot
}
Otros consejos
Similar a la otra respuesta, aquí hay algo cercano:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
NSString *annotationType = [NSString stringWithCString:object_getClassName(annotation)];
if ([annotationType compare:@"NSKVONotifying_MKUserLocation"] == 0)
return nil;
...
}
Por supuesto, use algo como esto bajo su propio riesgo. Podría dejar de funcionar mañana si Apple decidiera cambiar ese nombre.
A menudo usa su propia clase de anotación para buscar información relacionada con la anotación. En ese caso, para manejar solo sus propias anotaciones, use algo como
if ([annotation isKindOfClass:[MapLocation class]]) {}