नक्शे पर ओवरलैपिंग एनोटेशन (MKAnnotationView) के साथ इस मुद्दे

वोट
9

मेरे iphone आवेदन में, मैं MKMapView और कस्टम MKAnnotationView साथ MapKit उपयोग कर रहा हूँ।

समस्या यह है जब एनोटेशन नक्शे पर ओवरलैप (मेरे एप्लिकेशन में, एनोटेशन तस्वीरें हैं और उन फ़ोटो ओवरलैप हो सकता है) और जब आप एनोटेशन उस मोर्चे पर दिखाई देता है पर टैप करते हैं, यह एक और एनोटेशन (पीठ पर), जो घटना प्राप्त करता है (यादृच्छिक प्रतीत हो रहा है )।

मैं किसी भी तरह सामने एनोटेशन को घटना भेजने के लिए नहीं मिला। मैं विश्वास नहीं कर सकता इस बग / समस्या किसी भी समाधान नहीं है!

जेड आदेश और एनोटेशन ओवरलैपिंग के आदेश stackoverflow पर सवाल मुझे इतना मदद नहीं की।

कृपया किसी भी विचार का स्वागत करते हैं (यहां तक ​​कि गंदे समाधान) है!

यहाँ मेरी कोड (फैंसी कुछ नहीं, बहुत ही सामान्य) में से कुछ हैं:

CustomAnnotation.h

@interface CustomAnnotation : NSObject <MKAnnotation> {
   @private
   CustomAnnotationView* view;
}

    @property (nonatomic, retain) CustomAnnotationView* view;

@end

CustomAnnotation.m

@implementation CustomAnnotation

@synthetize view;

CustomAnnotationView.h

@interface CustomAnnotationView : MKAnnotationView {
}

@end

CustomAnnotationView.m

@implementation CustomAnnotationView

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
// Do something related to the annotation tapped
}

@end

मुख्य वर्ग ... // एनोटेशन जोड़ रहे हैं और उनमें से कुछ अन्य लोगों के साथ ओवरलैप करता है।

- (void)addAnnotation:(CustomAnnotation*)annotation {
    [map addAnnotation:annotation];
}

...

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {

    NSString* identifier = getIdentifierFromAnnotation(annotation);
    CustomAnnotationView* view;
    if(!(view = (CustomAnnotationView*)[map dequeueReusableAnnotationViewWithIdentifier:identifier])) {
        view = [[CustomAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier: identifier];
        [(CustomAnnotation*)annotation setView:view];
        [view release];
    }
    return view;
}
18/03/2010 को 16:07
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
2

अंत में, सबसे अच्छा तरीका है मैंने पाया और कहा कि नक्शा funcionalities खो करने के लिए है से बचा जाता है:

  • CustomAnnotationView (touchesEnded) पर संपर्क श्रोता (प्रत्येक एनोटेशन पर) जाने

  • जब स्पर्श घटना प्राप्त करने, मुख्य वर्ग के लिए घटना के लिए स्थानांतरण

  • मुख्य वर्ग एनोटेशन पर लूप और एनोटेशन एक अच्छा स्थान (एनोटेशन फ्रेम में स्पर्श घटना) है कि रहता है और कहा कि सामने है

यह बहुत अच्छी तरह से काम करता है।

22/04/2010 को 12:04
का स्रोत उपयोगकर्ता

वोट
0

मैं मोर्चे पर देखने के लिए UITapGestureRecognizer जोड़ दिया है और यह मेरे लिए समस्या हल हो जाती।

आपके मामले में, CustomAnnotationView करने के लिए एक इशारा पहचानकर्ता जोड़ने मुद्दे को हल करना चाहिए।

15/12/2011 को 15:04
का स्रोत उपयोगकर्ता

वोट
0

एलेक्जेंडर के जवाब पर के बाद, मैं अपने सभी कस्टम MKAnnotationViews अक्षम के साथ वस्तुओं

annView.enabled = NO

इसलिए वे MKMapView डिफ़ॉल्ट चयन व्यवहार का जवाब नहीं है, और अपने कस्टम में लागू MKAnnotationView निम्नलिखित:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
 self.enabled = YES;
 [(MKMapView*)self.superview selectAnnotation:self.annotation animated:NO];
}

यह समाधान आईओएस 4. पर अच्छा काम करता है यह अक्षम करने में एक MKAnnotationView अपने userInteractionEnabled निष्क्रिय नहीं होती की तरह लगता है, जबकि आईओएस 3 पर होता है। फिर भी आईओएस 3 के लिए एक समाधान की तलाश में ...

संपादित करें : वास्तव में, यह आईओएस 4.1 में एक बग हो रहा है। आईओएस 4.2 में, एक पिन अक्षम करने भी स्पर्श इवेंट अक्षम करता है। इसलिए इस विधि केवल 4.1 और संभवतः 4.0 के लिए काम करता है।

21/10/2010 को 06:47
का स्रोत उपयोगकर्ता

वोट
0

इस का हल देखें प्रश्न । मूल रूप से आप एक पारदर्शी UIView जो छूता के सभी रोकना होगा पैदा हो जाएगी। मैं इसे करने की कोशिश नहीं की है, लेकिन यह अधिक परेशानी की तुलना में यह लायक है हो सकता है आप MKMapView में पिंच-टू-जूम कार्यक्षमता के सभी reimplement लिए है।

यदि आपके पास दो (या अधिक) MKAnnotations सह स्थित आप बार-बार दोनों के बीच टॉगल करने के लिए उपयोग कर सकते हैं। यही कारण है कि अपने अनुप्रयोग में कोई भी परिवर्तन के बिना काम करना चाहिए।

21/04/2010 को 15:04
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more