web-dev-qa-db-ja.com

MKMapViewのすべての注釈を削除する方法

Objective-cで表示されているすべての注釈を繰り返すことなく、マップ上のすべての注釈を削除する簡単な方法はありますか?

98
kevin Mendoza

はい、ここに方法があります

[mapView removeAnnotations:mapView.annotations]

ただし、前のコード行では、ユーザーのロケーションピン「Blue Pin」を含むすべてのマップアノテーション「PINS」がマップから削除されます。すべてのマップアノテーションを削除し、ユーザーロケーションピンをマップ上に保持するには、2つの方法があります。

例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;
}
242
RocketMan

これを行う最も簡単な方法は次のとおりです。

-(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];
}
36
Sandip Sarkar

ユーザーの場所以外のすべての注釈を削除する方法を次に示します。これは、この回答を再び探しに来ると思われるため、明示的に記述されています。

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;
17
Victor Van Hee

これは、Sandipの回答と非常に似ていますが、ユーザーの場所を再追加しないため、青い点が再び点滅することはありません。

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

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

    [self.mapView removeAnnotations:annotations];
}
13
Chris

ユーザーの場所への参照を保存する必要はありません。必要なことは次のとおりです。

[mapView removeAnnotations:mapView.annotations]; 

そして、あなたがmapView.showsUserLocationYESに設定すると、マップ上のユーザーの位置が引き続き保持されます。このプロパティをYESに設定すると、基本的に、マップビューにユーザーの場所の更新と取得を開始して、マップに表示するように要求します。から MKMapView.hコメント:

// Set to YES to add the user location annotation to the map and start updating its location
11
Aviel Gross

Swiftバージョン:

func removeAllAnnotations() {
    let annotations = mapView.annotations.filter {
        $0 !== self.mapView.userLocation
    }
    mapView.removeAnnotations(annotations)
}
6
Kosuke Ogawa

スイフト3

if let annotations = self.mapView.annotations {
    self.mapView.removeAnnotations(annotations)
}
6
mckanet

Swift 2.0シンプルで最高:

mapView.removeAnnotations(mapView.annotations)
2
Maselko

1つのタイプのサブクラスを削除するには、次のようにします

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

ここで、PlacesAnnotationMKAnnotationのサブクラスです

0
Tharak