Adakah cara sederhana untuk menghapus semua anotasi pada peta tanpa mengulang semua anotasi yang ditampilkan di Objective-c?
Adakah cara sederhana untuk menghapus semua anotasi pada peta tanpa mengulang semua anotasi yang ditampilkan di Objective-c?
Jawaban:
Ya, begini caranya
[mapView removeAnnotations:mapView.annotations]
Namun baris kode sebelumnya akan menghapus semua anotasi peta "PINS" dari peta, termasuk pin lokasi pengguna "Pin Biru". Untuk menghapus semua anotasi peta dan mempertahankan pin lokasi pengguna di peta, ada dua cara yang mungkin untuk melakukannya
Contoh 1, pertahankan anotasi lokasi pengguna, hapus semua pin, tambahkan kembali pin lokasi pengguna, tetapi ada kekurangan dengan pendekatan ini, ini akan menyebabkan pin lokasi pengguna berkedip pada peta, karena menghapus pin kemudian menambahkannya kembali
- (void)removeAllPinsButUserLocation1
{
id userLocation = [mapView userLocation];
[mapView removeAnnotations:[mapView annotations]];
if ( userLocation != nil ) {
[mapView addAnnotation:userLocation]; // will cause user location pin to blink
}
}
Contoh 2, saya pribadi lebih suka menghindari menghapus pin pengguna lokasi sejak awal,
- (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;
}
Inilah cara termudah untuk melakukannya:
-(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];
}
Berikut cara menghapus semua anotasi kecuali lokasi pengguna, yang ditulis secara eksplisit karena saya membayangkan saya akan mencari jawaban ini lagi:
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;
Ini sangat mirip dengan jawaban Sandip, kecuali bahwa itu tidak menambahkan kembali lokasi pengguna sehingga titik biru tidak berkedip dan mati lagi.
-(void)removeAllAnnotations
{
id userAnnotation = self.mapView.userLocation;
NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
[annotations removeObject:userAnnotation];
[self.mapView removeAnnotations:annotations];
}
Anda tidak perlu menyimpan referensi apa pun ke lokasi pengguna. Yang dibutuhkan hanyalah:
[mapView removeAnnotations:mapView.annotations];
Dan selama Anda mapView.showsUserLocation
menyetelnya YES
, Anda akan tetap memiliki lokasi pengguna di peta. Pengaturan properti ini pada YES
dasarnya meminta tampilan peta untuk mulai memperbarui dan mengambil lokasi pengguna, untuk menampilkannya di peta. Dari MKMapView.h
komentar:
// Set to YES to add the user location annotation to the map and start updating its location
Versi Swift:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}
Cepat 3
if let annotations = self.mapView.annotations {
self.mapView.removeAnnotations(annotations)
}