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

È stato utile?

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]]) {}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top