removeAnnotations
を使用してmapView
から注釈を削除しますが、ユーザーの場所annも削除します。これを防ぐにはどうすればよいですか、またはユーザーannを表示に戻す方法はありますか?
NSArray *annotationsOnMap = mapView.annotations;
[mapView removeAnnotations:annotationsOnMap];
更新:
IOS 9 SDKを試してみたところ、ユーザー注釈は削除されなくなりました。単純に使用できます
mapView.removeAnnotations(mapView.annotations)
過去の回答(iOS 9より前のiOSで実行されるアプリの場合):
これを試して:
NSMutableArray * annotationsToRemove = [ mapView.annotations mutableCopy ] ;
[ annotationsToRemove removeObject:mapView.userLocation ] ;
[ mapView removeAnnotations:annotationsToRemove ] ;
編集:Swiftバージョン
let annotationsToRemove = mapView.annotations.filter { $0 !== mapView.userLocation }
mapView.removeAnnotations( annotationsToRemove )
マップからすべての注釈をクリアするには:
[self.mapView removeAnnotations:[self.mapView annotations]];
指定した注釈をMapviewから削除するには
for (id <MKAnnotation> annotation in self.mapView.annotations)
{
if (![annotation isKindOfClass:[MKUserLocation class]])
{
[self.mapView removeAnnotation:annotation];
}
}
これがあなたを助けることを願っています。
Swiftの場合、単純にワンライナーを使用できます。
mapView.removeAnnotations(mapView.annotations)
編集:nielsbotが述べたように、次のように設定しない限り、ユーザーの位置注釈も削除されます。
mapView.showsUserLocation = true
ユーザーの場所がMKUserLocation
のクラスの場合は、isKindOfClass
を使用して、ユーザーの場所の注釈が削除されないようにします。
if (![annotation isKindOfClass:[MKUserLocation class]]) {
}
それ以外の場合は、– mapView:viewForAnnotation:
の注釈の種類を認識するフラグを設定できます。
NSPredicate
フィルターはどうですか?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"className != %@", NSStringFromClass(MKUserLocation.class)];
NSArray *nonUserAnnotations = [self.mapView.annotations filteredArrayUsingPredicate:predicate];
[self.mapView removeAnnotations:nonUserAnnotations];
NSPredicateフィルターを使用すると、常に寿命が長くなります
Swift 4.1:
通常、MKUserLocation注釈を削除したくない場合は、単に実行できます:
self.mapView.removeAnnotations(self.annotations)
。
このメソッドは、デフォルトでは、annotations
リストからMKUserLocation注釈を削除しません。
ただし、MKUserLocation(以下のannotationsNoUserLocation
変数を参照)を除くすべての注釈を除外する必要がある場合MKUserLocation注釈以外のすべての注釈に集中するような他の理由は、以下のこの単純な拡張機能を使用できます。
extension MKMapView {
var annotationsNoUserLocation : [MKAnnotation] {
get {
return self.annotations.filter{ !($0 is MKUserLocation) }
}
}
func showAllAnnotations() {
self.showAnnotations(self.annotations, animated: true)
}
func removeAllAnnotations() {
self.removeAnnotations(self.annotations)
}
func showAllAnnotationsNoUserLocation() {
self.showAnnotations(self.annotationsNoUserLocation, animated: true)
}
}