2011-08-22 20 views
16

Come si visualizzano le immagini anziché i pin sulla mappa. Finora posso aggiungere solo i pin alla spina. Un codice di esempio del .m sarebbe estremamente utile dal momento che sono ancora nuovo alla programmazione iOS.Perni iOS MapKit personalizzati

+1

Un po 'di ricerca va un lungo cammino :) http://stackoverflow.com/questions/4579397/iphone-mapkit-adding-custom-image-and-pins-to-annotations e anche: http://stackoverflow.com/questions/7124028/change-pin-design –

risposta

53
#pragma mark - 
#pragma mark MKMapView delegate 
- (MKAnnotationView *)mapView:(MKMapView *)mapview viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    if ([annotation isKindOfClass:[MKUserLocation class]]) 
     return nil; 
    static NSString* AnnotationIdentifier = @"AnnotationIdentifier"; 
    MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier]; 
    if(annotationView) 
     return annotationView; 
    else 
    { 
     MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation 
                     reuseIdentifier:AnnotationIdentifier] autorelease]; 
     annotationView.canShowCallout = YES; 
     annotationView.image = [UIImage imageNamed:@"someImage.png"]; 
     UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     [rightButton addTarget:self action:@selector(writeSomething:) forControlEvents:UIControlEventTouchUpInside]; 
     [rightButton setTitle:annotation.title forState:UIControlStateNormal]; 
     annotationView.rightCalloutAccessoryView = rightButton; 
     annotationView.canShowCallout = YES; 
     annotationView.draggable = YES; 
     return annotationView; 
    } 
    return nil; 
} 

EDIT:

potevo spiegare a tutti voi per il MKAnnotationView, ma penso che si trova la documentazione fornita da Apple per essere una spiegazione molto meglio che da qualsiasi altra fonte. Controlla la sezione panoramica nel link.

https://developer.apple.com/documentation/mapkit/mkannotationview

+0

funziona. Grazie. potresti inserire una breve spiegazione sui parametri passati e su quale sia l'identificatore di annotazione? è simile alla proprietà del tag .net? – Bahamut

+0

Invece di usare "someImage.png", nel mio requisito, devo disegnare su UIView e usando [annotationView addSubView: myView]. Funziona bene. Ma non chiamare "didSelectAnnotationView" alla sua uscita. Qualcosa di sbagliato? – Satyam

+0

Potrebbe essere necessario disabilitare l'interazione dell'utente di quella vista. – Robin

6

Vai organizzatore di Xcode e poi andare alla documentazione e di ricerca weathermap si vede ad esempio per la mappa con l'inclusione di immagini a annotazione.

0
#pragma mark - 
#pragma mark MKMapView delegate 
-(void)addAllPinsOnMapView 
{ 



MKCoordinateRegion region = mapViewOffer.region; 
region.center = CLLocationCoordinate2DMake(12.9752297537231, 80.2313079833984); 
region.span.longitudeDelta= 0.1f; 
region.span.latitudeDelta= 0.1f; 
[mapViewOffer setRegion:region animated:YES]; 






mapViewOffer.delegate=self; 
arrMapPin=[[NSMutableArray alloc] init]; 
NSArray *name=[[NSArray alloc]initWithObjects: 
       @"Title1", 
       @"Title2", 
       @"Title3", nil]; 

NSMutableArray *arrCoordinateStr = [[NSMutableArray alloc] initWithCapacity:name.count]; 
[arrCoordinateStr addObject:@"12.970760345459,80.2190093994141"]; 
[arrCoordinateStr addObject:@"12.9752297537231,80.2313079833984"]; 
[arrCoordinateStr addObject:@"12.9788103103638,80.2412414550781"]; 

for(int i = 0; i < name.count; i++) 
{ 
    NSArray *components = [[arrCoordinateStr objectAtIndex:i] componentsSeparatedByString:@","]; 
    double latitude = [components[0] doubleValue]; 
    double longitude = [components[1] doubleValue]; 

    MKPointAnnotation *mapPin = [[MKPointAnnotation alloc] init]; 
    CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(latitude, longitude); 
    mapPin.title = [name objectAtIndex:i]; 
    mapPin.coordinate = coordinate; 
    [mapViewOffer addAnnotation:mapPin]; 
} 
} 
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView: 
(MKAnnotationView *)view 
{ 
NSLog(@"%@",view.annotation.title); 
NSLog(@"%f",view.annotation.coordinate.latitude); 
NSLog(@"%f",view.annotation.coordinate.longitude); 

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(calloutTapped:)]; 
[view addGestureRecognizer:tapGesture]; 

} 
-(void)calloutTapped:(UITapGestureRecognizer *) sender 
{ 
NSLog(@"Callout was tapped"); 

MKAnnotationView *view = (MKAnnotationView*)sender.view; 
id <MKAnnotation> annotation = [view annotation]; 
if ([annotation isKindOfClass:[MKPointAnnotation class]]) 
{ 
    //[self performSegueWithIdentifier:@"annotationDetailSegue" sender:annotation]; 
    OfferDetailsViewController *objOfferDetailsViewController = [[OfferDetailsViewController alloc]init]; 
    [self.navigationController pushViewController:objOfferDetailsViewController animated:YES]; 
} 
} 
- (MKAnnotationView *)mapView:(MKMapView *)theMapView 
viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
MKAnnotationView *pinView = nil; 
static NSString *defaultPinID = @"annotationViewID"; 
pinView = (MKAnnotationView *)[mapViewOffer dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
if (pinView == nil){ 
    pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID]; 
} 

pinView.canShowCallout = YES; 
pinView.image = [UIImage imageNamed:@"placeholder"]; 


UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
[infoButton addTarget:self action:@selector(infoButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
pinView.rightCalloutAccessoryView = infoButton; 

return pinView; 
} 
+0

aggiungi qualche descrizione prima di pubblicare un lungo snippet di codice. –

Problemi correlati