Чи є простий спосіб видалити всі анотації на карті без повторення через усі відображені анотації в Objective-c?
Чи є простий спосіб видалити всі анотації на карті без повторення через усі відображені анотації в Objective-c?
Відповіді:
Так, ось як
[mapView removeAnnotations:mapView.annotations]
Однак попередній рядок коду видалить з карти всі анотації "PINS", включаючи PIN-код користувача "Blue Pin". Щоб видалити всі анотації на карті та зберегти на карті контактний знак користувача, є два можливі способи зробити це
Приклад 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;
Це дуже схоже на відповідь Сандіпа, за винятком того, що він не додає повторно місцезнаходження користувача, щоб синя крапка знову не моргала і не вимикалася.
-(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
Швидка версія:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}