Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add a image to MKPointAnnotation

Is it possible?

Im performing an action here that gives to me a pin. But i need a image. And MKAnnotation seems complicated for me.

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


        }

Thanks!

like image 325
Lucas Veiga Avatar asked Mar 30 '11 21:03

Lucas Veiga


1 Answers

You'll need to set up an MKMapViewDelegate, and implement

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

Here's sample code, stolen from the MapCallouts sample code provided on Apple's developer site. I've modified it to focus on the important details. You can see below that the key is to set the image on an annotation view, and return that annotation view from this method.

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

We use dequeueReusableAnnotationViewWithIdentifier to grab an already created view to make reuse of our annotation views. If one isn't returned we create a new one. This prevents us from creating hundreds of MKAnnotationViews if only a few are ever in sight at the same time.

like image 83
Stephen Poletto Avatar answered Sep 27 '22 17:09

Stephen Poletto