2010-01-14 13 views
5

Ho un MKMapView implementato con queste righe di codice sorgente (la mia posizione è un proiettile blu, gli altri di uno sono i perni viola):MKMapView -> visualizzare un pulsante per la mia posizione

- (MKAnnotationView *)mapView:(MKMapView *)mapViewLocal viewForAnnotation:(id <MKAnnotation>)annotation { 
    if (annotation == mapViewLocal.userLocation) { 
     mapViewLocal.userLocation.title = @"Test"; 
     [mapViewLocal setRegion:MKCoordinateRegionMakeWithDistance(mapViewLocal.userLocation.coordinate, 1000, 1000) animated:YES]; 
     return nil; 
    } 

    MKPinAnnotationView *pinView = (MKPinAnnotationView*)[mapViewLocal dequeueReusableAnnotationViewWithIdentifier:@"Pin"]; 
     if(pinView == nil) { 
      pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"] autorelease]; 
      pinView.pinColor = MKPinAnnotationColorPurple; 
      pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
      pinView.animatesDrop = NO; 
      pinView.canShowCallout = YES; 
     } else { 
      pinView.annotation = annotation; 
     } 
     return pinView; 
    } 

I perni viola hanno un pulsante di divulgazione dei dettagli, ma la mia annotazione non ne ha uno. Come posso impostare un tale pulsante?

E questo è il metodo in cui posso fare qualcosa di un pulsante è pressd:

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 

Come potrei distinguere tra la mia posizione e tutti gli altri la propria, perché ho bisogno di un trattamento diverso. C'è un altro delegato o devo fare una specie di clausola if?

risposta

4

in qualcosa di didUpdateToLocation scrivere come

AddressAnnotation *myAnnotation = [[AddressAnnotation alloc] initWithCoordinate:currentLocation]; 
       myAnnotation.title = @"You are here"; 
       [self.mapView addAnnotation:myAnnotation]; 

And Then

Something Like

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
      // try to dequeue an existing pin view first 
     static NSString* annotationIdentifier = @"annotationIdentifier"; 

     NSString *titlestr = annotation.title; 

     MKPinAnnotationView* pinView = (MKPinAnnotationView *) 
     [mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier]; 
    MKPinAnnotationView* customPinView = [[[MKPinAnnotationView alloc] 
              initWithAnnotation:annotation reuseIdentifier:nil] autorelease]; 
     if (!pinView) 
     { 
      // if an existing pin view was not available, create one 
      // MKPinAnnotationView* customPinView = [[[MKPinAnnotationView alloc] 
                //initWithAnnotation:annotation reuseIdentifier:annotationIdentifier] autorelease]; 
      if([titlestr isEqualToString:@"You are here"]) 
      { 
       customPinView.pinColor = MKPinAnnotationColorGreen; 
       NSLog(@"customPinView.pinColor = MKPinAnnotationColorGreen;"); 
      } 
      else{ 
       customPinView.pinColor = MKPinAnnotationColorPurple; 
       customPinView.selected = TRUE; 
       NSLog(@"customPinView.pinColor = MKPinAnnotationColorPurple;"); 
       UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
       [rightButton addTarget:self 
           action:@selector(ShowStoreDetail:) 
         forControlEvents:UIControlEventTouchUpInside]; 
       customPinView.rightCalloutAccessoryView = rightButton; 
      } 
      customPinView.animatesDrop = YES; 
      customPinView.canShowCallout = YES; 

      return customPinView; 
     } 
     else 
     { 
      pinView.annotation = annotation; 



      if([titlestr isEqualToString:@"You are here"]) 
      { 
       customPinView.pinColor = MKPinAnnotationColorPurple; 
       NSLog(@"customPinView.pinColor = MKPinAnnotationColorGreen;"); 
      } 
      else{ 
       customPinView.pinColor = MKPinAnnotationColorPurple; 
       customPinView.selected = TRUE; 
       NSLog(@"customPinView.pinColor = MKPinAnnotationColorPurple;"); 
       UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
       [rightButton addTarget:self 
           action:@selector(ShowStoreDetail:) 
         forControlEvents:UIControlEventTouchUpInside]; 
       customPinView.rightCalloutAccessoryView = rightButton; 
      } 


     } 
     return pinView; 

    return nil; 
} 
Problemi correlati