এমকেম্যাপভিউতে সমস্ত টিকা কীভাবে মুছবেন


উত্তর:


247

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;
}

1
does this remove the user location too? what if I want to remove all the annotations besides the user location?
kevin Mendoza

1
You do not need to save any reference to user location. Read my answer below for more info.
Aviel Gross

36

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];
}

Good answer, much faster than iterating through all of them, especially if you have more than a handful of annotations.
Matthew Frederick

6
একটি টীকা মুছে ফেলা হলে এটি আবার যুক্ত করা, পিনটি মানচিত্রে ঝলক দেয়। কিছু অ্যাপ্লিকেশনগুলির জন্য বড় বিষয় নাও হতে পারে তবে আপনি যদি ধারাবাহিকভাবে নতুন টীকাগুলির সাথে মানচিত্রটি আপডেট করে থাকেন তবে এটি ব্যবহারকারীর জন্য বিরক্তিকর হতে পারে।
রকেটম্যান

কোনও কারণে, আমার ব্যবহারকারী অবস্থানের টীকাটি সর্বদা এই পদ্ধতিটি ব্যবহার করে অদৃশ্য হয়ে যায়। ভিক্টর ভ্যান হির সমাধানটি আমার পক্ষে কাজ করে।
স্টিফেন বার্নস

17

এখানে স্পষ্টভাবে লিখিতভাবে ব্যবহারকারীর অবস্থান ব্যতীত সমস্ত টীকাগুলি কীভাবে সরিয়ে ফেলা যায় সে সম্পর্কে আমি ধারণা করি যে আমি আবার এই উত্তরটি খুঁজতে আসব:

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;

আপনাকে ধন্যবাদ, এটি অনুলিপি এবং পেস্ট করা এবং [লোকস রিলিজ] অপসারণ এবং মানচিত্রভিউকে _ ম্যাপভিউতে পরিবর্তন করার জন্য কাজ করেছে। আমি এখানে এমকেডায়ারশনের জন্য একটি দুর্দান্ত টিউটোরিয়াল অনুসরণ করছি devfright.com/mkdireferences- টিউটোরিয়াল এবং দিকনির্দেশ পাওয়ার পরে পিনটি সরাতে চেয়েছিলাম। আমি সেই পদ্ধতির শেষ লাইনের নীচে কোডটি 'পরিষ্কার রুট'মথার সাথে যুক্ত করেছি
Hblegg

আপডেট মুছে ফেলুন একাধিক - (আইবিএક્શન) ক্লিয়ারট রুট: (UIBarButtonItem *) প্রেরক {self.destinationLabel.text = শূন্য; self.distanceLabel.text = শূন্য; self.steps.text = শূন্য; [স্ব.ম্যাপভিউ অপসারণ ওভারলে: রুটডেটেলস.পলিলাইন]; NSMutableArray * locs = [[NSMutableArray বরাদ্দ] init]; (আইডি <MKAnnotation> এনেট [[ম্যাপভিউ টীকাতে]]) {যদি ([এ্যানট কাইন্ডঅফক্লাস: [এমকিউজারলোকেশন ক্লাস]]) {} অন্য {[লোকস অ্যাডবজেক্ট: টীকা]; ; _ [_ম্যাপভিউ অপসারণশৈলী: লকস]; [_ম্যাপভিউ অপসারণ ওভারলে: _ ম্যাপভিউ.ওভারলেস]; }
হাব্লেগ

13

এটি সন্দীপের জবাবের সাথে খুব মিল, এটি ব্যবহারকারীর অবস্থানটি পুনরায় যুক্ত না করে যাতে নীল বিন্দুটি আবার জ্বলজ্বল করে না।

-(void)removeAllAnnotations
{
    id userAnnotation = self.mapView.userLocation;

    NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
    [annotations removeObject:userAnnotation];

    [self.mapView removeAnnotations:annotations];
}

11

আপনার ব্যবহারকারীর অবস্থানের কোনও রেফারেন্স সংরক্ষণ করার দরকার নেই। যা প্রয়োজন তা হ'ল:

[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

আমি এই ফর্ম্যাটটি ব্যবহার করে শেষ করেছি: [self.mapView.removeAnnotations (ম্যাপভিউ.অনোটেশনস)]
এডওয়ার্ড হুট করে




0

এক ধরণের সাবক্লাস অপসারণ করতে আপনি করতে পারেন

mapView.removeAnnotations(mapView.annotations.filter({$0 is PlacesAnnotation}))

যেখানে PlacesAnnotationএকটি সাবক্লাস হয়MKAnnotation

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.