2012-11-12 15 views
5

छुपाएं मेरे पास कस्टम एनोटेशन के साथ एक आईओएस ऐप है।इसे हटाने के लिए एक एमकेएनोटेशन व्यू टैप करें और इसे कॉलआउट

  1. मैं एक MKAnnotationView दोहन करने के लिए एक बार यह कॉलआउट दिखाने के लिए सक्षम होना चाहते हैं (ठीक काम करता है)
  2. और फिर मैं MKAnnotationView नल दूसरी बार एनोटेशन का चयन रद्द करने के लिए और उस के लिए कॉल आउट छुपाना चाहते हैं एनोटेशन (आईओएस 5 में काम करता है लेकिन आईओएस 6 नहीं)।

मैं समझता हूं कि किया गया चयन करें नोटेशन केवल एक एनोटेशन के प्रारंभिक चयन के लिए बुलाया जाना चाहिए। ([1]: Selecting a MapView Annotation Twice ), और इस लेख और अन्य लोगों के आधार पर मैंने पढ़ा है ([2]: ios mapkit closing annotation callouts by tapping the map), ऐसा लगता है कि इसे चुनने के बाद एमकेएनोटेशन व्यू पर कोई अतिरिक्त टैप का पता लगाना एक यूआईटीएपीजेस्टर रिकॉग्नाइज़र की आवश्यकता है।

तो, मैं एक UITapGestureRecognizer का उपयोग कर रहा हूं और जब मैं पहले से ही चुने गए हैं, तो मैं अपने एनोटेशन दृश्यों पर अतिरिक्त नल का पता लगा रहा हूं, और मैं अचयनित कर रहा हूं जब मैं टैप को पहचानता हूं और मैं छुपा/चयन कर रहा हूं क्रमशः कॉलआउट/एनोटेशन। यह आईओएस 5 में बहुत अच्छा काम करता है, लेकिन आईओएस 6

आईओएस 6 में टैप इशारा पहचानकर्ता का आह्वान किया जाता है, और मैं अपना कोड कॉलआउट को छुपाने और एनोटेशन और सबकुछ ठीक से चुनने के लिए कॉल करता हूं, लेकिन फिर चयनअनोटेशन व्यू विधि किसी भी तरह से बुलाया जाता है और इसलिए मेरा कॉलआउट फिर से दिखाई देता है और मेरी एनोटेशन फिर से चुनी जाती है।

जो मुझे लगता है कि यह हो रहा है कि मैं अपने टैप इशारा पहचानकर्ता में एनोटेशन व्यू के अपने डी-चयन के तुरंत बाद, टैप इवेंट अभी भी सक्रिय है, नक्शा व्यू टच इवेंट का पता लगाता है और चयन एन्टरेशन व्यू का आह्वान करता है, और इसलिए एनोटेशन कि मैं बस डी-चयनित अब फिर से चुना जा रहा है।

मुझे नहीं पता कि यह केवल आईओएस 6 में क्यों होता है, लेकिन मैं अपने वांछित व्यवहार को संभालने के लिए किसी भी अन्य विचारों पर इनपुट की उम्मीद कर रहा हूं।

+0

आप कोड को दिखा सकते हैं के साथ इशारा दूर करने के लिए बना? – james075

उत्तर

0

मुझे नहीं पता कि आपको अभी भी आपकी समस्या है या नहीं (मुझे उम्मीद है कि आपकी पोस्ट थोड़ी पुरानी है)। लेकिन अगर कुछ लोगों को एक ही समस्या मिलती है तो एनोटेशन को अचयनित करने और मैपकिट से बचने के लिए एक समाधान को एनोटेशन को अचयनित करने से पहले थोड़ा विलंब जोड़ना है।

- (void)annotationTap:(UIGestureRecognizer *)gesture 
{ 
    MKAnnotationView *mkav = (MKAnnotationView *)gesture.view; 
    //Add a small delay to deselect 
    [self performSelector:@selector(deselectAnnotation:) withObject:mkav.annotation afterDelay:0.3]; 
    [gesture.view removeGestureRecognizer:gesture]; 
} 


- (void)deselectAnnotation:(id<MKAnnotation>)annotation 
{ 
    [self.mapView deselectAnnotation:annotation animated:YES]; 
} 

और मामले में उपयोगकर्ता नक्शे पर नल donMt एनोटेशन का चयन रद्द इस कोड

- (void) mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view { 
     for (UIGestureRecognizer *recognizer in view.gestureRecognizers) { 
      [view removeGestureRecognizer:recognizer]; 
     } 
} 
संबंधित मुद्दे