web-dev-qa-db-ja.com

青い点を削除せずにMKMapViewからすべての注釈を削除するにはどうすればよいですか?

私の位置の青い点がない地図ビューからすべての注釈を削除したいと思います。私が電話するとき:

[mapView removeAnnotations:mapView.annotations];

すべての注釈が削除されます。

注釈が青い点の注釈ではないかどうかを(すべての注釈のforループのように)どのように確認できますか?

[〜#〜] edit [〜#〜](これで解決しました):

for (int i =0; i < [mapView.annotations count]; i++) { 
    if ([[mapView.annotations objectAtIndex:i] isKindOfClass:[MyAnnotationClass class]]) {                      
         [mapView removeAnnotation:[mapView.annotations objectAtIndex:i]]; 
       } 
    }
26
Mat

MKMapViewドキュメント を見ると、注釈プロパティを使用しているようです。これを繰り返して、どの注釈があるかを確認するのは非常に簡単です。

for (id annotation in myMap.annotations) {
    NSLog(@"%@", annotation);
}

また、ユーザーの場所を表す注釈を与えるuserLocationプロパティもあります。注釈を調べて、ユーザーの場所ではない注釈をすべて覚えている場合は、removeAnnotations:メソッドを使用して注釈を削除できます。

NSInteger toRemoveCount = myMap.annotations.count;
NSMutableArray *toRemove = [NSMutableArray arrayWithCapacity:toRemoveCount];
for (id annotation in myMap.annotations)
    if (annotation != myMap.userLocation)
        [toRemove addObject:annotation];
[myMap removeAnnotations:toRemove];

お役に立てれば、

サム

58
deanWombourne

すばやく簡単な場合は、MKUserLocationアノテーションの配列をフィルタリングする方法があります。これをMKMapViewのremoveAnnotations:関数に渡すことができます。

 [_mapView.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]];

これは、述語を使用してダーティな作業を行うことを除いて、上記の手動フィルターとほぼ同じだと思います。

31
Sebastian Bean

以下を実行するだけの方が簡単ではありませんか。

//copy your annotations to an array
    NSMutableArray *annotationsToRemove = [[NSMutableArray alloc] initWithArray: mapView.annotations]; 
//Remove the object userlocation
    [annotationsToRemove removeObject: mapView.userLocation]; 
 //Remove all annotations in the array from the mapView
    [mapView removeAnnotations: annotationsToRemove];
    [annotationsToRemove release];
13
Mikael

すべてのアノテーションをクリーンアップし、MKUserLocationクラスのアノテーションを保持する最短の方法

[self.mapView removeAnnotations:self.mapView.annotations];
8
DazChong
for (id annotation in map.annotations) {
    NSLog(@"annotation %@", annotation);

    if (![annotation isKindOfClass:[MKUserLocation class]]){

        [map removeAnnotation:annotation];
    }
    }

私はこのように変更しました

6
chings228

次のことを行う方が簡単です。

NSMutableArray *annotationsToRemove = [NSMutableArray arrayWithCapacity:[self.mapView.annotations count]];
    for (int i = 1; i < [self.mapView.annotations count]; i++) {
        if ([[self.mapView.annotations objectAtIndex:i] isKindOfClass:[AddressAnnotation class]]) {
            [annotationsToRemove addObject:[self.mapView.annotations objectAtIndex:i]];
            [self.mapView removeAnnotations:annotationsToRemove];
        }
    }

[self.mapView removeAnnotations:annotationsToRemove];
1
kunalg

Swift 3.0

for annotation in self.mapView.annotations {
    if let _ = annotation as? MKUserLocation {
       // keep the user location
    } else {
       self.mapView.removeAnnotation(annotation)
    }
}
0
Laszlo