私の位置の青い点がない地図ビューからすべての注釈を削除したいと思います。私が電話するとき:
[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]];
}
}
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];
お役に立てれば、
サム
すばやく簡単な場合は、MKUserLocationアノテーションの配列をフィルタリングする方法があります。これをMKMapViewのremoveAnnotations:関数に渡すことができます。
[_mapView.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]];
これは、述語を使用してダーティな作業を行うことを除いて、上記の手動フィルターとほぼ同じだと思います。
以下を実行するだけの方が簡単ではありませんか。
//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];
すべてのアノテーションをクリーンアップし、MKUserLocationクラスのアノテーションを保持する最短の方法
[self.mapView removeAnnotations:self.mapView.annotations];
for (id annotation in map.annotations) {
NSLog(@"annotation %@", annotation);
if (![annotation isKindOfClass:[MKUserLocation class]]){
[map removeAnnotation:annotation];
}
}
私はこのように変更しました
次のことを行う方が簡単です。
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];
Swift 3.0
for annotation in self.mapView.annotations {
if let _ = annotation as? MKUserLocation {
// keep the user location
} else {
self.mapView.removeAnnotation(annotation)
}
}