2011-11-24 8 views
8

पर लाल पिन डिफ़ॉल्ट मैं एप्लिकेशन पर कस्टम एनोटेशन पिन है:कस्टम एनोटेशन पिन परिवर्तन लंबे नल

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    return [kml viewForAnnotation:annotation type:state]; 
} 

जहाँ मैं कस्टम दृश्य लौट सकते हैं और इस तरह के रूप-चिह्न की annotationView के लिए setImage बनाने:

- (MKAnnotationView *)viewForAnnotation:(id <MKAnnotation>)point type:(int)state 
{ 
    // Find the KMLPlacemark object that owns this point and get 
    // the view from it. 
    for (KMLPlacemark *placemark in _placemarks) { 
     if ([placemark point] == point) 
     { 
      UIButton *disclosureButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure]; 
      [[placemark annotationView] setCanShowCallout: YES];    
      [[placemark annotationView] setRightCalloutAccessoryView:disclosureButton]; 

      if (state == 0) 
      { 
       [[placemark annotationView] setImage:[UIImage imageNamed:@"ic_pin_tour.png"]]; 
      } 
      else 
      { 
       [[placemark annotationView] setImage:[UIImage imageNamed:@"ic_pin_point.png"]]; 
      } 

      return [placemark annotationView]; 
     } 
    } 
    return nil; 
} 

लेकिन अगर मैं अपने एनोटेशन पिन पर लंबे समय तक टैप करता हूं तो यह उपस्थिति को इसके डिफ़ॉल्ट दृश्य (रेडपिन) में बदल देता है। मुझे समझ में नहीं आता कि लंबी टैप पर किस विधि को बुलाया जाता है। मैंने UITapGestureRecognizer के साथ खेलने की कोशिश की, लेकिन पता नहीं चला। अगर मैं सिर्फ एनोटेशन पिन टैप करता हूं तो सब ठीक काम करता है और मेरा कस्टम एनोटेशन पिन व्यू गायब नहीं होता है। आप देख सकते हैं मैं इस स्क्रीनशॉट में क्या मतलब है: so useful image with example

तो, क्यों लंबे नल पर एनोटेशन पिन उपस्थिति परिवर्तन?

उत्तर

23

इसलिए, यदि आप एनोटेशन व्यू के लिए कस्टम छवि का उपयोग करना चाहते हैं, तो हमेशा MKPinAnotationView के बजाय एक सामान्य MKAnnotationView का उपयोग करें। मैं सिर्फ एक जगह पर MKPinAnnotationView है जब मैं काम करता है MKAnnotationView सब कुछ के साथ बदलना ठीक से अब:

- (MKAnnotationView *)annotationView 
{ 
    if (!annotationView) { 
     id <MKAnnotation> annotation = [self point]; 
     if (annotation) { 
      MKAnnotationView *pin = 
       [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil]; 
      pin.canShowCallout = YES; 
      annotationView = pin; 
     } 
    } 
    return annotationView; 
} 
+0

धन्यवाद। मुझे बहुत मदद की। –

+1

आकर्षण के रूप में काम किया। तथ्य यह है कि एमकेपीनएनोटेशन व्यू एमकेएनोटेशन व्यू के साथ एक उप-वर्ग है जो कार्यक्षमता के साथ आप नहीं चाहते हैं। – igraczech