Objective-c'de görüntülenen tüm ek açıklamaları yinelemeden bir haritadaki tüm ek açıklamaları silmenin basit bir yolu var mı?
Objective-c'de görüntülenen tüm ek açıklamaları yinelemeden bir haritadaki tüm ek açıklamaları silmenin basit bir yolu var mı?
Yanıtlar:
Evet, işte nasıl
[mapView removeAnnotations:mapView.annotations]
Bununla birlikte, önceki kod satırı, kullanıcı konum iğnesi "Mavi İğne" dahil olmak üzere tüm harita açıklamalarını "PINS" haritasından kaldıracaktır. Tüm harita açıklamalarını kaldırmak ve kullanıcının konum iğnesini haritada tutmak için, bunu yapmanın iki olası yolu vardır
Örnek 1, kullanıcı konum açıklamasını koruyun, tüm pimleri kaldırın, kullanıcı konum pimini geri ekleyin, ancak bu yaklaşımda bir kusur vardır, pimi çıkardıktan sonra eklediği için harita üzerinde kullanıcı konum pininin yanıp sönmesine neden olur geri
- (void)removeAllPinsButUserLocation1
{
id userLocation = [mapView userLocation];
[mapView removeAnnotations:[mapView annotations]];
if ( userLocation != nil ) {
[mapView addAnnotation:userLocation]; // will cause user location pin to blink
}
}
Örnek 2, kişisel olarak konum kullanıcı PIN'ini ilk etapta kaldırmaktan kaçınmayı tercih ediyorum,
- (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;
}
İşte bunu yapmanın en basit yolu:
-(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];
}
Bu yanıtı tekrar aramaya geleceğimi hayal ettiğim için açıkça yazılan kullanıcı konumu dışındaki tüm ek açıklamaları şu şekilde kaldırabilirsiniz:
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;
Bu, Sandip'in cevabına çok benzer, ancak kullanıcı konumunu yeniden eklememesi, böylece mavi nokta tekrar yanıp sönmez.
-(void)removeAllAnnotations
{
id userAnnotation = self.mapView.userLocation;
NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
[annotations removeObject:userAnnotation];
[self.mapView removeAnnotations:annotations];
}
Kullanıcı konumuna herhangi bir referans kaydetmenize gerek yoktur. Gereken tek şey şudur:
[mapView removeAnnotations:mapView.annotations];
Ve olarak mapView.showsUserLocation
ayarladığınız sürece YES
, haritada hala kullanıcı konumunuz olacaktır. Bu özelliği, YES
temelde harita görünümünden, harita üzerinde göstermek için kullanıcı konumunu güncellemeye ve getirmeye başlamasını ister. Gönderen MKMapView.h
yorumlarla:
// Set to YES to add the user location annotation to the map and start updating its location
Swift versiyonu:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}