回答:
はい、こちらです
[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