क्या उद्देश्य-सी में सभी प्रदर्शित एनोटेशन के माध्यम से पुनरावृत्ति किए बिना मानचित्र पर सभी एनोटेशन को हटाने का एक सरल तरीका है?
क्या उद्देश्य-सी में सभी प्रदर्शित एनोटेशन के माध्यम से पुनरावृत्ति किए बिना मानचित्र पर सभी एनोटेशन को हटाने का एक सरल तरीका है?
जवाबों:
हाँ, यहाँ कैसे है
[mapView removeAnnotations:mapView.annotations]
हालाँकि कोड की पिछली पंक्ति मानचित्र से सभी मानचित्र एनोटेशन "पिन्स" को हटा देगी, जिसमें उपयोगकर्ता स्थान पिन "ब्लू पिन" भी शामिल है। सभी मानचित्र एनोटेशन को हटाने और उपयोगकर्ता के स्थान को मानचित्र पर पिन करने के लिए, ऐसा करने के दो संभावित तरीके हैं
उदाहरण 1, उपयोगकर्ता स्थान एनोटेशन को बनाए रखें, सभी पिन निकालें, उपयोगकर्ता स्थान पिन वापस जोड़ें, लेकिन इस दृष्टिकोण के साथ एक दोष है, यह उपयोगकर्ता के स्थान के पिन को मैप पर ब्लिंक करने का कारण बनेगा, पिन को हटाने के कारण फिर इसे जोड़ना वापस
- (void)removeAllPinsButUserLocation1
{
id userLocation = [mapView userLocation];
[mapView removeAnnotations:[mapView annotations]];
if ( userLocation != nil ) {
[mapView addAnnotation:userLocation]; // will cause user location pin to blink
}
}
उदाहरण 2, मैं व्यक्तिगत रूप से पहली जगह में स्थान उपयोगकर्ता पिन को हटाने से बचना चाहता हूं,
- (void)removeAllPinsButUserLocation2
{
id userLocation = [mapView userLocation];
NSMutableArray *pins = [[NSMutableArray alloc] initWithArray:[mapView annotations]];
if ( userLocation != nil ) {
[pins removeObject:userLocation]; // avoid removing user location off the map
}
[mapView removeAnnotations:pins];
[pins release];
pins = nil;
}
यहाँ ऐसा करने का सबसे सरल तरीका है:
-(void)removeAllAnnotations
{
//Get the current user location annotation.
id userAnnotation=mapView.userLocation;
//Remove all added annotations
[mapView removeAnnotations:mapView.annotations];
// Add the current user location annotation again.
if(userAnnotation!=nil)
[mapView addAnnotation:userAnnotation];
}
उपयोगकर्ता स्थान को छोड़कर सभी एनोटेशन को निकालने का तरीका यहां स्पष्ट रूप से लिखा गया है क्योंकि मुझे लगता है कि मैं फिर से इस उत्तर की तलाश में आऊंगा:
NSMutableArray *locs = [[NSMutableArray alloc] init];
for (id <MKAnnotation> annot in [mapView annotations])
{
if ( [annot isKindOfClass:[ MKUserLocation class]] ) {
}
else {
[locs addObject:annot];
}
}
[mapView removeAnnotations:locs];
[locs release];
locs = nil;
यह संदीप के जवाब से काफी मिलता-जुलता है, सिवाय इसके कि वह उपयोगकर्ता स्थान को फिर से नहीं जोड़ता है, इसलिए नीली डॉट फिर से बंद नहीं करता है।
-(void)removeAllAnnotations
{
id userAnnotation = self.mapView.userLocation;
NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
[annotations removeObject:userAnnotation];
[self.mapView removeAnnotations:annotations];
}
आपको उपयोगकर्ता स्थान पर किसी भी संदर्भ को सहेजने की आवश्यकता नहीं है। सभी की जरूरत है:
[mapView removeAnnotations:mapView.annotations];
और जब तक आपने mapView.showsUserLocation
सेट किया है YES
, तब भी आपके पास मानचित्र पर उपयोगकर्ता स्थान होगा। इस संपत्ति को सेटिंग्स YES
मूल रूप से मानचित्र दृश्य को अपडेट करने और उपयोगकर्ता स्थान को अपडेट करने और मानचित्र पर दिखाने के लिए लाने के लिए कहती है। से MKMapView.h
टिप्पणियाँ:
// Set to YES to add the user location annotation to the map and start updating its location
स्विफ्ट संस्करण:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}