2012-05-29 3 views
8

Ich bin mit dem MapKit Rahmen Google Maps auf meiner Anwendung zu laden und ich stelle auf der Karte 4 „simuliert“ Orte wie folgt aus:Wie benutze ich benutzerdefinierte Icons mit mapKit Framework?

- (void)viewDidLoad { 

[super viewDidLoad]; 

mapView.delegate = self; 

mapView.showsUserLocation = YES; 

MKUserLocation *userLocation = mapView.userLocation; 

MKCoordinateRegion region = 
MKCoordinateRegionMakeWithDistance (userLocation.location.coordinate,500,500); 
[mapView setRegion:region animated:NO]; 

//Simulated annotations on the map 
CLLocationCoordinate2D poi1Coord , poi2Coord , poi3Coord , poi4Coord; 
//poi1 coordinates 
poi1Coord.latitude = 37.78754; 
poi1Coord.longitude = -122.40718; 
//poi2 coordinates 
poi2Coord.latitude = 37.78615; 
poi2Coord.longitude = -122.41040; 
//poi3 coordinates 
poi3Coord.latitude = 37.78472; 
poi3Coord.longitude = -122.40516; 
//poi4 coordinates 
poi4Coord.latitude = 37.78866; 
poi4Coord.longitude = -122.40623; 

MKPointAnnotation *poi1 = [[MKPointAnnotation alloc] init]; 
MKPointAnnotation *poi2 = [[MKPointAnnotation alloc] init]; 
MKPointAnnotation *poi3 = [[MKPointAnnotation alloc] init]; 
MKPointAnnotation *poi4 = [[MKPointAnnotation alloc] init]; 


poi1.coordinate = poi1Coord; 
poi2.coordinate = poi2Coord; 
poi3.coordinate = poi3Coord; 
poi4.coordinate = poi4Coord; 

poi1.title = @"McDonald's"; 
poi1.subtitle = @"Best burgers in town"; 
poi2.title = @"Apple store"; 
poi2.subtitle = @"Iphone on sales.."; 
poi3.title = @"Microsoft"; 
poi3.subtitle = @"Microsoft's headquarters"; 
poi4.title = @"Post office"; 
poi4.subtitle = @"You got mail!"; 

[mapView addAnnotation:poi1]; 
[mapView addAnnotation:poi2]; 
[mapView addAnnotation:poi3]; 
[mapView addAnnotation:poi4];  

}

Der Code ist ziemlich einfach. Was ich tun möchte ist, anstatt den typischen roten Pin auf meiner Google Map zu verwenden, meine eigenen Bilder zu benutzen, um verschiedene Orte zu zeigen. Gibt es einen einfachen/direkten Weg dies zu tun, weil ich von den Samples, die ich bereits gefunden habe, sehr verwirrt war.

+1

Was ist die genaue Verwirrung? Was hast du probiert? – Anna

Antwort

11

Sie können die Annotation Bild unter Verwendung folgenden Code ändern,

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation 
{ 
    if ([[annotation title] isEqualToString:@"Current Location"]) {  
     return nil; 
    } 

    MKAnnotationView *annView = [[MKAnnotationView alloc ] initWithAnnotation:annotation reuseIdentifier:@"currentloc"]; 
    if ([[annotation title] isEqualToString:@"McDonald's"]) 
     annView.image = [ UIImage imageNamed:@"mcdonalds.png" ]; 
    else if ([[annotation title] isEqualToString:@"Apple store"]) 
     annView.image = [ UIImage imageNamed:@"applestore.png" ]; 
    else 
     annView.image = [ UIImage imageNamed:@"marker.png" ]; 
    UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    [infoButton addTarget:self action:@selector(showDetailsView) 
      forControlEvents:UIControlEventTouchUpInside]; 
    annView.rightCalloutAccessoryView = infoButton; 
    annView.canShowCallout = YES; 
    return annView; 
} 

wo "marker.png" ist Ihre Bilddatei.

+0

Vielen Dank für Ihre Antwort. Ok, das ist eine Funktion, die mir die Poi auf der Karte mit einem Bild zurückgibt. Aber wie nenne ich es für jeden anderen Poi? Ich verstehe nicht, wie ich diese Funktion verwenden sollte. Ich kopiere es einfach in der Viewcontroller-Datei? Es tut mir leid, ich bin sehr neu in der Entwicklung von iOS. – donparalias

+0

Ich denke, anstatt zu verwenden: [mapView addAnnotation: poi1]; ich sollte verwenden: [mapView viewForAnnotation: poi1]; richtig? – donparalias

+0

Nein, Sie müssen diese Methode nicht aufrufen. Dies ist eine der Delegate-Methode von MKAnnotation. Diese Methode wird automatisch aufgerufen. Ich habe gerade den obigen Code aktualisiert, um das Bild für jede Anmerkung (poi) zu ändern. Bitte beachten Sie den Code. Vielen Dank. – Nandha