2012-06-09 13 views
6

दोहन मैं एक कस्टम MKAnnotationView कॉलआउट को लागू कर रहा हूँ के साथ कोड यहाँ समझाया के बाद बंद हो जाता है (जैकब के एक), जो वास्तव में एनोटेशन के रूप में एक और कस्टम AnnotationView स्थानों का चयन किया गया:MKMapKit regionDidChangeAnimated कस्टम कॉलआउट

MKAnnotationView - Lock custom annotation view to pin on location updates

सब कुछ ठीक काम करता है, लेकिन मुझे कुछ अजीब व्यवहार मिला है। कस्टम कॉलआउट टैप करने के बाद, यह कॉलआउट को खारिज कर देगा लेकिन क्षेत्रडिड चेंजएनिएटेड प्रतिनिधि विधि बाद में कॉल हो रही है।

क्या मुझे कुछ याद आ रही है? मैं सामान्य रूप से मानचित्र को पैन कर सकता हूं, लेकिन यह उस प्रतिनिधि विधि को नहीं बुलाता है। यद्यपि यदि कोई ज़ूम इन या आउट करता है तो उसे कॉल किया जाता है।

एनोटेशन व्यू के लिए एक कस्टम कॉलऑट जोड़ने से पहले मैं रख रहा हूं, यह कभी नहीं हुआ।

अग्रिम में Thx।

सादर, एलन //

+0

हम वास्तव में यह पता लगाएंगे कि यह मूल प्रोजेक्ट पर होता है जो हर कोई आईओएस 5.1 एमुलेटर पर टेम्पलेट के रूप में उपयोग कर रहा है, इसलिए यह मेरा कोड नहीं है। मैं पर्यवेक्षकों के साथ didSelectView को बदलने की कोशिश करूंगा और देखें कि क्या होता है। –

+0

मुझे यह समस्या भी मिल रही है, ऐसा लगता है कि पिन के नए सेट को लोड करते समय पिन और होल्डिंग पर क्लिक करना होता है। – ThePower

उत्तर

2

मैं लिंक आप का उल्लेख से XCode प्रोजेक्ट डाउनलोड और त्रुटि पुन: पेश करने में सक्षम था। निम्नलिखित जवाब एक समाधान है कि मेरे लिए काम किया

MKMapView Not Calling regionDidChangeAnimated on Pan

सुविधा के लिए मैं समाधान दोहराना चाहते है और

CustomCalloutViewController.h में मैं कैसे यह उल्लेख किया परियोजना में लागू UIGestureRecognizerDelegate

@interface CustomCalloutViewController : UIViewController 
<MKMapViewDelegate, UIGestureRecognizerDelegate> 
जोड़ने

CustomCalloutViewController.m विधि viewDidLoad[super viewDidLoad];

से पहले जोड़ें
if (NSFoundationVersionNumber >= 678.58){ 

    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGestureCaptured:)]; 
    pinch.delegate = self;   
    [mapView addGestureRecognizer:pinch]; 

    [pinch release]; 

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureCaptured:)]; 
    pan.delegate = self; 
    [mapView addGestureRecognizer:pan]; 

    [pan release]; 
} 

तो अभी भी CustomCalloutViewController.m में जोड़ने के निम्नलिखित

#pragma mark - 
#pragma mark Gesture Recognizers 

- (void)pinchGestureCaptured:(UIPinchGestureRecognizer*)gesture{ 
    if(UIGestureRecognizerStateEnded == gesture.state){ 
     ///////////////////[self doWhatYouWouldDoInRegionDidChangeAnimated]; 
    } 
} 

- (void)panGestureCaptured:(UIPanGestureRecognizer*)gesture{ 
    if(UIGestureRecognizerStateEnded == gesture.state){ 


     NSLog(@"panGestureCaptured ended"); 
     // *************** Here it is ********************* 
     ///////////////////[self doWhatYouWouldDoInRegionDidChangeAnimated]; 
     // *************** Here it is ********************* 
    } 
} 

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ 
    return YES; 
} 

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch: (UITouch *)touch{ 
    return YES; 
} 

संपादित करें: मैं एक वैकल्पिक हल here (नीचे से ऊपर समाधान का उल्लेख किया गया है बिल्कुल नीचे, भी) मिल गया है। मैंने कोशिश नहीं की, लेकिन प्रमोशन लगता है। मैं इसे यहां दोहराता हूं:

मेरा कामकाज सरल है: अपने दृश्य नियंत्रक में, एमकेमैप व्यू को देखेंडिडएपर में देखें, और इसे देखने में नष्ट करेंडिडिसिपार:। मुझे एहसास है कि इंटरफ़ेस बिल्डर का उपयोग करने वालों के लिए यह एक दोस्ताना कामकाज नहीं है, लेकिन, मेरे विचार में, यह आपके ऐप में स्मृति को संरक्षित करने का सबसे साफ और संभवतः सबसे अच्छा तरीका है।

संबंधित मुद्दे