Objective-cで表示されているすべての注釈を繰り返すことなく、マップ上のすべての注釈を削除する簡単な方法はありますか?
はい、ここに方法があります
[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;
}
これを行う最も簡単な方法は次のとおりです。
-(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];
}
ユーザーの場所以外のすべての注釈を削除する方法を次に示します。これは、この回答を再び探しに来ると思われるため、明示的に記述されています。
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;
これは、Sandipの回答と非常に似ていますが、ユーザーの場所を再追加しないため、青い点が再び点滅することはありません。
-(void)removeAllAnnotations
{
id userAnnotation = self.mapView.userLocation;
NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
[annotations removeObject:userAnnotation];
[self.mapView removeAnnotations:annotations];
}
ユーザーの場所への参照を保存する必要はありません。必要なことは次のとおりです。
[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
Swiftバージョン:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}
スイフト3
if let annotations = self.mapView.annotations {
self.mapView.removeAnnotations(annotations)
}
Swift 2.0シンプルで最高:
mapView.removeAnnotations(mapView.annotations)
1つのタイプのサブクラスを削除するには、次のようにします
mapView.removeAnnotations(mapView.annotations.filter({$0 is PlacesAnnotation}))
ここで、PlacesAnnotation
はMKAnnotation
のサブクラスです