2013-02-21 7 views
5

मेरे पास MKMapView है जिसमें एक बहुत ही अजीब समस्या है जो समझाने के लिए कठिन है। मेरे पास MKOverlay है जो ओवरले के बिंदुओं को फ़ाइल में सहेजकर और viewDidLoad में ओवरले लोड करके सत्रों के बीच सहेजा जाता है।MKOverlay केवल ios5 पर अजीब परिस्थितियों के साथ सबकुछ ओवरले करता है?

कदम

  1. मैं नक्शे पर मानचित्र सब कुछ करने के लिए MKOverlay जोड़ने का ओवरले द्वारा ओवरले हो जाता है के बाद एक MKOverlayMKMapView
  2. दूसरे या तीसरे रन पर करने के लिए जोड़ें: तो यहाँ समस्या है जैसा कि मैंने जोड़ा है उसी रंग । के अपवाद के साथ मानचित्र पर सबकुछ उस मानचित्र का दृश्य है जिसे आप लोड करते समय देख सकते हैं।

अन्य अजीब बातें:

  1. इस समस्या को केवल तब होता है जब mapView.showsUserLocation सच
  2. इस समस्या को केवल iOS5 पर होता है पर सेट है। सब कुछ iOS6 पर ठीक काम करता है।
  3. यदि आप रंगीन ओवरले को ज़ूम आउट करते हैं तो का दृश्य भाग आकार को नए स्तर पर भरने के लिए मानचित्र पर ज़ूम आउट करता है जिस पर आप ज़ूम आउट करते हैं।

इस लड़के को एक ही समस्या है, हालांकि उसका समाधान मेरे लिए काम नहीं करता है।

Trouble with overlay using MKPolyline & MKPolylineView

यहाँ है मेरी कोड के कुछ:

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

    MKPinAnnotationView *pinView = nil; //switch this to MKAnnotationView and use .image property if pins need to be images 

    if(annotation == self.startingPin || annotation == self.endingPin){ 

     static NSString *defaultPinID = @"com.MagnusDevelopment.pin"; 

     pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 

     if (pinView == nil)pinView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:defaultPinID]; 

     pinView.canShowCallout = YES; 
     pinView.animatesDrop = TRUE; 

     if(annotation == self.startingPin){ 
     //starting pin 
      pinView.pinColor = MKPinAnnotationColorGreen; 
     }else{ 
     //ending pin 
      pinView.pinColor = MKPinAnnotationColorRed; 
     } 

    } 
    return pinView; 
} 

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
{ 
    MKPolylineView *aView = [[MKPolylineView alloc] initWithPolyline:(MKPolyline *)overlay]; 
    aView.lineWidth = 7.0; 
    aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.6]; 
    return aView; 
} 

कोड कहा जाता है जब दृश्य लोड हो जाए, मैं निर्देशांक कि पॉलीलाइन सरणी सही इससे पहले कि वे जोड़ रहे हैं करने के लिए जोड़ा जा रहा है लॉग इन किया है, और सब कुछ ठीक और बेवकूफ है! कि समस्या क्या है के बारे में कोई भी विचार:

NSInteger numberOfSteps = pointsArray.count; 

    NSLog(@"number of steps: %i",numberOfSteps); 

    CLLocationCoordinate2D coordinates[numberOfSteps]; 
    for (NSInteger index = 0; index < numberOfSteps; index++) { 
     CLLocation *location = [pointsArray objectAtIndex:index]; 
     CLLocationCoordinate2D coordinate = location.coordinate; 
     coordinates[index] = coordinate; 
    } 
    MKPolyline *polyLine = [MKPolyline polylineWithCoordinates:coordinates count:numberOfSteps]; 
    [self.mainMap addOverlay:polyLine]; 

यहाँ क्या होता है जब ओवरले दिखाई नहीं देता और नक्शे पर ओर करने के लिए उपयोगकर्ता पैन की एक तस्वीर है?

उत्तर

1

आप dequeueReusableAnnotationViewWithIdentifier का उपयोग कर रहे हैं, लेकिन आप केवल deVueReusableAnnotationViewWithIdentifier का नतीजा पिनव्यू के लिए एनोटेशन असाइन कर रहे हैं।

कि विधि अक्सर एक मौजूदा MKPinAnnotationView उदाहरण वापस आ जाएगी, यह बजाय होना चाहिए:

MKPinAnnotationView *pin = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
if (pin == nil) { 
    pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID]; 
} else { 
    pin.annotation = annotation; 
} 
+0

समस्या अभी भी हो रही है .... – Shredder2794

+0

एचएम, आप मानचित्र और रेखाएं कब बना रहे हैं? चूंकि आपने कहा था कि यह तब होता है जब उपयोगकर्ता का स्थान चालू होता है, मानचित्र के कंटेनर व्यू के दृश्य विल्लएपियर के दौरान मानचित्र और पॉलीलाइनों का निर्माण करने का प्रयास करें, फिर मानचित्र के शो यूज़र लोकेशन को YID को viewDidAppear के दौरान सेट करें। – poetmountain

+0

यह काम करता है! आपको बहुत - बहुत धन्यवाद! आपको इस समस्या के साथ भविष्य में लोगों के लिए इन टिप्पणियों में दिए गए उत्तर को फिट करने के लिए अपना उत्तर संपादित करना चाहिए! – Shredder2794

0

यह समस्या हो सकती है: MapView उपयोगकर्ता के वर्तमान स्थान के लिए दृश्य का उपयोग करने की कोशिश करता है, आप गुजर रहे हैं अपने अनुकूलित दृश्य।

इसे अपने मौजूदा कार्यान्वयन के साथ जोड़ने का प्रयास करें।

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

if ([annotation isKindOfClass:[MKUserLocation class]]) { 
    return nil;  
} 
return yourView; 
} 

पीएस: यह ओवरले व्यू का मुद्दा नहीं हो सकता है।

सर्वश्रेष्ठ सादर।

+0

समस्या अभी भी हो रही है ... – Shredder2794

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