2012-05-29 15 views
8

używam ramy MapKit załadować mapy google na mojej aplikacji i I miejsce na mapie 4 „symulowane” miejsc takich jak to:Jak używać niestandardowych ikon z ramami mapKit?

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

}

Kod jest dość prosta. Zamiast używać typowej czerwonej pinezki na mojej mapie google, chcę użyć własnych obrazów do pokazania różnych miejsc. Czy istnieje prosty/prosty sposób, aby to zrobić, ponieważ jestem bardzo zdezorientowany z próbek, które już znalazłem.

+1

Jakie jest dokładne zamieszanie? Co próbujesz? – Anna

Odpowiedz

11

Można zmienić obraz adnotacji za pomocą następującego kodu,

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

gdzie „marker.png” jest plik obrazu.

+0

Dziękuję bardzo za odpowiedź. Ok, więc jest to funkcja, która daje mi powrót do mapy na obrazie. Ale jak mogę to nazwać dla każdego innego poi? Nie rozumiem, w jaki sposób powinienem korzystać z tej funkcji. Po prostu skopiuj go w pliku kontrolera view? Przykro mi, jestem bardzo nowy w rozwoju ios. – donparalias

+0

Myślę, że zamiast używać: [mapView addAnnotation: poi1]; powinienem użyć: [mapView viewForAnnotation: poi1]; prawo? – donparalias

+0

Nie, nie musisz wywoływać tej metody. Jest to jedna z delegowanych metod MKAnnotation. Ta metoda zostanie wywołana automatycznie. Właśnie zaktualizowałem powyższy kod, aby zmienić obraz dla każdej adnotacji (poi). Proszę zapoznać się z kodem. Dzięki. – Nandha

Powiązane problemy