showsUserLocation ritorna pin al posto del punto blu nel simulatore di iPhone
-
13-09-2019 - |
Domanda
Questo è il mio metodo -mapView:viewForAnnotation
che scende perni quando creo viste di annotazione. Ma quando ho impostato mapView.showsUserLocation = YES;
in -viewDidLoad
, ottengo un perno sganciata su Infinite Loop (previsto - nel simulatore). E non il normale punto blu
- (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;
}
Come posso farlo cadere perni e mostrare il punto blu come bene?
Grazie
Soluzione
Davvero semplice da risolvere, anche se incerto se questo è il modo corretto per farlo ...
if (annotation == mapView.userLocation){
return nil; //default to blue dot
}
Altri suggerimenti
Simile al altra risposta, ecco qualcosa di simile:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
NSString *annotationType = [NSString stringWithCString:object_getClassName(annotation)];
if ([annotationType compare:@"NSKVONotifying_MKUserLocation"] == 0)
return nil;
...
}
Naturalmente, usare qualcosa di simile a proprio rischio. Si potrebbe smettere di lavorare domani se Apple ha deciso di cambiare quel nome.
Spesso si utilizza la propria classe di annotazione per cercare informazioni relative al annotazione. In tal caso, per gestire solo le proprie annotazioni, usare qualcosa come
if ([annotation isKindOfClass:[MapLocation class]]) {}