2011-03-30 11 views
5

¿Es posible?Agregar una imagen a MKPointAnnotation

Estoy realizando una acción aquí que me da un alfiler. Pero necesito una imagen. Y MKAnnotation me parece complicado.

 - (void)abreMapa:(NSString *)endereco { 

      NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", 
            [endereco stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
      NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString]]; 
      NSArray *listItems = [locationString componentsSeparatedByString:@","]; 

      double latitude = 0.0; 
      double longitude = 0.0; 

      if([listItems count] >= 4 && [[listItems objectAtIndex:0] isEqualToString:@"200"]) { 
       latitude = [[listItems objectAtIndex:2] doubleValue]; 
       longitude = [[listItems objectAtIndex:3] doubleValue]; 
      } 
      else { 
       //Show error 
      } 

      CLLocationCoordinate2D coordinate; 
      coordinate.latitude = latitude; 
      coordinate.longitude = longitude; 
      myMap.region = MKCoordinateRegionMakeWithDistance(coordinate, 2000, 2000); 



      MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
      [annotation setCoordinate:coordinate]; 
      [annotation setTitle:@"Some Title"]; 
      [myMap addAnnotation:annotation]; 




      // Coloca o icone 
      [self.view addSubview:mapa]; 


     } 

Gracias!

Respuesta

22

Tendrá que configurar una MKMapViewDelegate, e implementar

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

Aquí está el código de ejemplo, robado del código de ejemplo MapCallouts proporcionada en el sitio de desarrolladores de Apple. Lo he modificado para enfocarme en los detalles importantes. Puede ver a continuación que la clave es establecer la imagen en una vista de anotación y devolver esa vista de anotación desde este método.

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
     static NSString *SFAnnotationIdentifier = @"SFAnnotationIdentifier"; 
     MKPinAnnotationView *pinView = 
      (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:SFAnnotationIdentifier]; 
     if (!pinView) 
     { 
      MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation 
                      reuseIdentifier:SFAnnotationIdentifier] autorelease]; 
      UIImage *flagImage = [UIImage imageNamed:@"flag.png"]; 
      // You may need to resize the image here. 
      annotationView.image = flagImage; 
      return annotationView; 
     } 
     else 
     { 
      pinView.annotation = annotation; 
     } 
     return pinView; 
} 

Utilizamos dequeueReusableAnnotationViewWithIdentifier para agarrar una vista ya creado para hacer la reutilización de nuestros puntos de vista de anotación. Si no se devuelve uno, creamos uno nuevo. Esto nos impide crear cientos de MKAnnotationViews si solo unas pocas están a la vista al mismo tiempo.

+0

Este MKMapViewDelegate no aparece para mí. –

+0

http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapViewDelegate_Protocol/MKMapViewDelegate/MKMapViewDelegate.html. Probablemente establezca la propiedad de delegado de MKMapView en el controlador de vista que lo administra. –

+0

¿Hay algún archivo de muestra, simple, no de la manzana, que pueda mostrarme cómo implementar esto simple? –

Cuestiones relacionadas