2009-11-05 10 views
13

मैं एमके मैपकिट की सीमाओं से काफी निराश हो रहा हूं। मेरी वर्तमान समस्या को एनोटेशन विचारों के जेड-ऑर्डरिंग के साथ करना है, खासकर जब यह स्पर्श से संबंधित है। यदि आप डिफ़ॉल्ट जेड-ऑर्डर स्वीकार करते हैं तो मैपकिट आपको देता है:एमकेएनोटेशन व्यूज़ के जेड ऑर्डरिंग

  1. ऑर्डर यादृच्छिक दिखाई देता है। जेड-ऑर्डर एनोटेशन जोड़े जाने के क्रम से असंबंधित है।
  2. यदि एक एनोटेशन दूसरे के शीर्ष पर समाप्त होता है, तो शीर्ष एनोटेशन को छूने से आम तौर पर नीचे एनोटेशन के लिए कॉलआउट लाया जाता है। ऐसा लगता है कि हिट डिटेक्टिंग ड्रॉ ऑर्डर का भी सम्मान नहीं करती है। उसके साथ क्या है?

मैं सुलझाने # 1 निम्नलिखित कोड को वेब पर पाया

 
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { 
    for (MKAnnotationView * annView in views) { 
     TopBottomAnnotation * ann = (TopBottomAnnotation *) [annView annotation]; 
     if ([ann top]) { 
     [[annView superview] bringSubviewToFront:annView]; 
     } else { 
     [[annView superview] sendSubviewToBack:annView]; 
     } 
    } 

} 

एनोटेशन पारित कर दिया विचारों के माध्यम से चल रहा है (जो ज़ेड-ऑर्डर पर कुछ नियंत्रण देने के लिए बनाया गया था) के लिए कुछ इसी तरह का उपयोग कर की कोशिश की है नक्शा देखने के लिए: didAddAnnotationViews: और उनके z-order को एडजस्ट करना # 1 को ठीक करने लगता है। समस्या यह है कि अब कॉलआउट विचार हमेशा एनोटेशन विचारों के शीर्ष पर नहीं हैं। मैपकिट परतों के बारे में बहुत उलझन में प्रतीत होता है (कॉलआउट सभी एनोटेशन दृश्यों के ऊपर एक परत में खींचा जाना चाहिए)। मैं यह भी समझ सकता हूं कि यह कैसे भ्रमित हो रहा है क्योंकि आपके द्वारा प्राप्त सभी एमकेएनोटेशन व्यू में एक ही पर्यवेक्षण (एक निजी वर्ग MKOverlayView) है। आपको लगता है कि कोई भी उचित डिजाइन इस ओवरले व्यू के बारे में कॉलआउट आकर्षित करेगा।

क्या किसी ने सफलतापूर्वक # 1 या # 2 हल किया है?

+0

आपको टॉपबॉटमएनोटेशन क्लास कहां मिला? –

+0

TopBottomAnnotation आपके एनोटेशनव्यू क्लास –

+1

का नाम है ... लगभग 6 साल बाद और मुझे एक ही समस्या है। यह कैसे तय नहीं किया गया है? – Tys

उत्तर

8

आप (जो की तरह आपके पास पहले से लगता है) एक कस्टम annotationView आप जोड़ने की कोशिश कर सकते हैं इस:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self.superview bringSubviewToFront:self]; 
    [super touchesBegan:touches withEvent:event]; 
} 

एक पक्ष प्रभाव है कि हर बार एक मार्कर भी इसे छुआ है के सामने से दिखाई है जेड-ऑर्डर, जो वास्तव में समझदार है क्योंकि उपयोगकर्ता इस पर ध्यान केंद्रित कर रहा है।

+0

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

+0

मुझे नहीं पता कि यह एक ही समस्या है, लेकिन मेरे पास एक साथ बंद मार्कर पिन का एक गुच्छा था।प्रत्येक पिन को टैप करने से अन्य पिन के नीचे कॉलआउट दिखाई देंगे, इसलिए ऐसा लगता है कि प्रत्येक एनोटेशनव्यू अपनी कॉलआउट परत बनाए रखता है। लेकिन आप सही हैं, कॉलआउट अपनी शीर्ष परत पर होना चाहिए। एक बग्रेपोर्ट दर्ज करना चाहते हैं। – Ramin

+0

रामिन, मैंने अभी आपके समाधान की कोशिश की है, और यह वास्तव में कॉलआउट की समस्या को हल करता है जो सभी एनोटेशन के शीर्ष पर प्रदर्शित नहीं होता है। धन्यवाद। अभी भी ऐसा लगता है कि ओवरलैपिंग होने पर कौन सी एनोटेशन स्पर्श हो जाती है। लेकिन यह अन्य फिक्स से कम महत्वपूर्ण है। – btschumy

7

रामिन, जो मैं करने की कोशिश कर रहा हूं उसके लिए बिल्कुल सही है। हालांकि मेरे पास परिभाषित एक कस्टम एनोटेशन दृश्य नहीं था। मैंने इसे एक श्रेणी का उपयोग करके हल किया और यह सही काम किया!

#import <Foundation/Foundation.h> 
#import <MapKit/MapKit.h> 


@interface MKPinAnnotationView (ZIndexFix) 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
@end 

और कार्यान्वयन::

(:

#import "AEBMapViewCategory.h" 
@implementation MKPinAnnotationView (ZIndexFix) 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self.superview bringSubviewToFront:self]; 
    [super touchesBegan:touches withEvent:event]; 
} 
@end 
+0

उत्कृष्ट ... जो मैं कोड का एक अच्छा टुकड़ा कहता हूं। – Biranchi

+0

यह नक्शा ViewForAnnotations के साथ कैसे फिट होना चाहिए या अधिक आम तौर पर मानचित्रदृश्य अनुप्रयोग के बाकी हिस्सों को कैसे? क्षमा करें यह मुझे स्पष्ट नहीं है। – si28719e

+0

वाह। तो इस तरह के 'बस काम' लगता है। जो बहुत अद्भुत है, लेकिन मैं अभी भी 'क्यों' जानना चाहता हूं। और मुझे कोई जानकारी नहीं है। – si28719e

6

एक और समाधान, में सेटअप एनोटेशन दृश्य परत की zPosition (annotationView.layer.zPosition) की कोशिश करो

यहाँ शीर्ष लेख है शून्य) mapView: (MKMapView *) mapView didAddAnnotationViews: (NSArray *) विचार;

+0

इसे करने का सही तरीका – rmvz3

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