2011-09-18 16 views
10

He creado una anotación que estoy agregando a un MKMapView. ¿Cómo voy a tener una imagen personalizada en lugar del pin rojo estándar?Imagen personalizada para 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 

Respuesta

1

reemplazar el método mapView:viewForAnnotation: delegado. Si el parámetro annotation apunta a una de sus anotaciones personalizadas, devuelva una vista personalizada que se vea a su gusto.

+0

¿Puede indicarme un ejemplo de cómo hacer esto? Soy nuevo en el objetivo c. Gracias – 3sl

18

MKMapView obtiene sus puntos de vista pin de su método delegado mapView:viewForAnnotation: Así que hay que:

  1. Configure su controlador de vista como el delegado del mapa.
  2. Implementar mapView: viewForAnnotation: en su controlador.

Indica tu controlador como delegado

@interface MapViewController : UIViewController <MKMapViewDelegate> 

Marque la interfaz con el protocolo de delegado. Esto le permite configurar el controlador como delegado de MKMapView en Interface Builder (IB). Abra el archivo .xib que contiene su mapa, haga clic con el botón derecho en MKMapView y arrastre el conector delegate a su controlador.
Si prefiere usar el código IB, agregue self.yourMapView.delegate=self; en el método viewDidLoad del controlador. El resultado será el mismo.

Implementar 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

Para ajustar la imagen personalizada en lugar de standart MKPinAnnotationView la única manera de hacerlo es utilizar MKAnnotationView con la función - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation. Aquí está el ejemplo:

- (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; 
} 

Para el valor aView.image usted puede configurar su propia imagen. Y también mira en MKAnnotationView referencia de clase para manejar mejor con él.

Cuestiones relacionadas