1. ホーム
  2. objective-c

[解決済み] MKMapViewのアノテーションをすべて削除する方法

2022-12-17 22:55:14

質問

Objective-cで表示されているすべての注釈を繰り返し処理することなく、地図上のすべての注釈を削除する簡単な方法はありますか。

どのように解決するのですか?

はい、次のとおりです。

[mapView removeAnnotations:mapView.annotations]

しかし、前のコードの行は、ユーザー位置のピン "PINS" を含むすべてのマップ注釈をマップから削除します。 を削除してしまいます。すべてのマップ注釈を削除するには を削除し、ユーザーの位置ピンを地図上に残すには、次の2つの方法があります。 次の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;
}