MKAnnotationViews की Z- क्रमों

वोट
13

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

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

मैं # 1 को सुलझाने के लिए निम्न कोड वेब पर मिल (जो ज़ेड-ऑर्डर पर कुछ नियंत्रण देने के लिए बनाया गया था) के लिए कुछ इसी तरह का उपयोग कर की कोशिश की है

- (शून्य) MapView: (MKMapView *) MapView didAddAnnotationViews: (NSArray *) विचारों {
   के लिए (MKAnnotationView * विचारों में annView) {
      TopBottomAnnotation * एन = (TopBottomAnnotation *) [annView एनोटेशन];
      अगर ([एन शीर्ष]) {
         [[AnnView superview] bringSubviewToFront: annView];
      } अन्य {
         [[AnnView superview] sendSubviewToBack: annView];
      }
   }

}

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

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

05/11/2009 को 17:04
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
8

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

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

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

05/11/2009 को 17:54
का स्रोत उपयोगकर्ता

वोट
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
04/12/2009 को 19:40
का स्रोत उपयोगकर्ता

वोट
6

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

(शून्य) MapView: (MKMapView *) MapView didAddAnnotationViews: (NSArray *) के दृश्य;

03/05/2013 को 12:12
का स्रोत उपयोगकर्ता

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