2011-09-18 19 views
10

Ho creato un'annotazione che sto aggiungendo a un MKMapView. Come farei per avere un'immagine personalizzata al posto del pin rosso standard?Immagine personalizzata per MKAnnotation

@interface AddressAnnotation : NSObject<MKAnnotation> { 
    CLLocationCoordinate2D coordinate; 
    NSString *title; 
    NSString *subtitle; 
    MKPinAnnotationColor pinColor; 
} 
@property (nonatomic,retain) NSString *title; 
@property (nonatomic,retain) NSString *subtitle; 
@property (nonatomic, assign) MKPinAnnotationColor pinColor; 
@end 

risposta

1

Ignorare il metodo delegato mapView:viewForAnnotation:. Se il parametro annotation punta a una delle tue annotazioni personalizzate, restituisci una visualizzazione personalizzata che ti sembra di tuo gradimento.

+0

Puoi indicarmi un esempio di come farlo? Sono nuovo all'obiettivo c. Grazie – 3sl

18

MKMapView ottiene i suoi panorami pin dalla sua metodo delegato mapView:viewForAnnotation: quindi bisogna:

  1. Impostare la vista del regolatore come delegato della mappa.
  2. Implementare mapView: viewForAnnotation: nel controller.

impostare il vostro controller come delegato

@interface MapViewController : UIViewController <MKMapViewDelegate> 

Mark l'interfaccia con il protocollo delegato. Questo consente di impostare il controller come delegato di MKMapView in Interface Builder (IB). Apri il file .xib contenente la mappa, fai clic con il tasto destro su MKMapView e trascina la presa delegate sul controller.
Se si preferisce utilizzare il codice anziché IB, aggiungere self.yourMapView.delegate=self; nel metodo viewDidLoad del controller. Il risultato sarà lo stesso.

Implementare MapView: viewForAnnotation:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    // this part is boilerplate code used to create or reuse a pin annotation 
    static NSString *viewId = @"MKPinAnnotationView"; 
    MKPinAnnotationView *annotationView = (MKPinAnnotationView*) 
     [self.mapView dequeueReusableAnnotationViewWithIdentifier:viewId]; 
    if (annotationView == nil) { 
     annotationView = [[[MKPinAnnotationView alloc] 
      initWithAnnotation:annotation reuseIdentifier:viewId] autorelease]; 
    } 
    // set your custom image 
    annotationView.image = [UIImage imageNamed:@"emoji-ghost.png"]; 
    return annotationView; 
} 
0

Per impostare un'immagine personalizzata invece di standart MKPinAnnotationView l'unico modo per farlo è quello di utilizzare MKAnnotationView con la funzione - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation. Ecco l'esempio:

- (nullable MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 

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

    static NSString *identifier = @"Annotation"; 

    MKAnnotationView *aView = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 

    if (!aView) { 
      aView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]; 
      aView.image = [UIImage imageNamed:@"Untitled1.png"]; 
      aView.canShowCallout = YES; 
      aView.draggable = YES; 
    } else { 
      aView.annotation = annotation; 
    } 

    return pin; 
} 

Per il valore aView.image È possibile impostare la propria immagine. E guarda anche al riferimento alla classe MKAnnotationView per gestire meglio con esso.

Problemi correlati