Is there a simple way to delete all the annotations on a map without iterating through all the displayed annotations in Objective-c?
Is there a simple way to delete all the annotations on a map without iterating through all the displayed annotations in Objective-c?
উত্তর:
Yes, here is how
[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;
}
Here is the simplest way to do that:
-(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)
}