2012-10-07 10 views
5

मैंने इसके बारे में कई पोस्ट पढ़ी हैं और फिर भी मुझे कोई समस्या है। यह दो अंक के बीच एक पॉलीलाइन आकर्षित करने के लिए मेरे कोड है:मानचित्र से पॉलीलाइन हटाएं देखें

-(void) drawAline:(CLLocation*)newLocation 
{ 
//drawing a line 
CLLocationCoordinate2D coordinateArray[2]; 
coordinateArray[0] = CLLocationCoordinate2DMake(newLocation.coordinate.latitude, newLocation.coordinate.longitude); 
coordinateArray[1] = CLLocationCoordinate2DMake(self.jerusalem.coordinate.latitude, self.jerusalem.coordinate.longitude); 

self.routeLine = [MKPolyline polylineWithCoordinates:coordinateArray count:2]; 
[self.mapView setVisibleMapRect:[self.routeLine boundingMapRect]]; 
[self.mapView addOverlay:self.routeLine]; 

} 

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay 
{ 
if(overlay == self.routeLine) 
{ 
    if(nil == self.routeLineView) 
    { 
     self.routeLineView = [[MKPolylineView alloc] initWithPolyline:self.routeLine]; 
     self.routeLineView.fillColor = [UIColor blueColor]; 
     self.routeLineView.strokeColor = [UIColor blueColor]; 
     self.routeLineView.lineWidth = 5; 
    } 
    return self.routeLineView; 
} 

return nil; 

}

thats ठीक काम करता है। समस्या को हटाने के लिए समस्या है। अगले कोड काम नहीं करता है:

for (id<MKOverlay> overlayToRemove in self.mapView.overlays) 
{ 
    if ([overlayToRemove isKindOfClass:[MKPolylineView class]]) 
    { 
     [mapView removeOverlay:overlayToRemove]; 
    } 
} 

अगले कोड न काम नहीं करता:

 if (self.routeLine) 
{ 
[self.mapView removeOverlay:self.routeLine]; 
    self.routeLineView = nil; 
    self.routeLine = nil; 
} 

धन्यवाद!

उत्तर

15

कोड है कि मानचित्र दृश्य के overlays सरणी के माध्यम से लूप में हो जाएगा

if ([overlayToRemove isKindOfClass:[MKPolylineView class]]) 

मानचित्र दृश्य के:, इस लाइन समस्या हैसरणी में id<MKOverlay> प्रकार की वस्तुएं हैं (फॉर-लूप सही तरीके से overlayToRemove घोषित करता है)।

तो overlays सरणी मॉडल ओवरले के लिए वस्तुओं और नहीं विचारों शामिल हैं।

MKPolylineView वर्ग एक MKPolyline ओवरले मॉडल के लिए दृश्य है।

तो if हालत होना चाहिए:

if ([overlayToRemove isKindOfClass:[MKPolyline class]]) 

ध्यान दें कि इस तरह के एक पाश के नक्शे से सभी पोलीलाइंस निकाल देंगे। यदि आप विशिष्ट पॉलिलाइन को हटाना चाहते हैं, तो आप इसे जोड़ने पर title सेट कर सकते हैं और फिर इसे हटाने से पहले इसे जांच सकते हैं।


कि जाँच करता है और self.routeLine हटाता सीधे रूप में लंबे समय के रूप में काम करना चाहिए self.routeLinenil नहीं है और नक्शे पर वर्तमान में एक उपरिशायी के लिए एक वैध संदर्भ है कोड के दूसरे टुकड़ा।


आप नक्शे (पॉलीलाइन) पर केवल एक ओवरले हैं, तो आप भी सिर्फ removeOverlays कह सकते हैं मानचित्र से सभी ओवरले (जो कुछ भी वे कर रहे हैं) को हटाने के लिए:

[self.mapView removeOverlays:self.mapView.overlays]; 
+0

धन्यवाद! मुझे एक और समस्या है, शायद आप मदद कर सकते हैं: http://stackoverflow.com/questions/12763469/ – user1553961

+0

धन्यवाद @ अन्ना ने मेरी मदद की .. –

1

आपका ओवरले MKPolylineMKPolylineView है कि नक्शा ज़ूम या स्क्रॉल होने पर ओवरले प्रदर्शित होता है ताकि ओवरले का डेटा विंडो में दिखाया जा सके। मानचित्र दृश्य का overlays सरणी डेटा है जिसमें ओवरले दृश्य उत्पन्न करने के लिए उपयोग किया जाएगा। overlays सरणी में कोई विचार नहीं है। तो, अपने कोड काम करने के लिए, इस लाइन

if ([overlayToRemove isKindOfClass:[MKPolylineView class]]) 

if ([overlayToRemove isKindOfClass:[MKPolyline class]]) 

करने के लिए अपने तीसरे स्निपेट में बदल सकते हैं और आप ठीक

+0

तुम बहुत धन्यवाद बहुत! – user1553961

+0

@ user1553961 Mkmapkit में एक सहायता। मैं ओवरलेयर का उपयोग कर आईओएस मानचित्र पर 2 बिंदुओं के बीच एक रेखा कैसे खींच सकता हूं। क्रिप्या मेरि सहायता करे। – sathis

+0

@ user1553961 मेरे पास एक कोड है लेकिन यह मेरे लिए काम नहीं कर रहा है। क्या आप मेरी मदद कर सकते हैं मेरे कोड में क्या गलत है? – sathis

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