Pregunta

Me gustaría eliminar todas las anotaciones de mi MapView sin el punto azul de mi posición. Cuando llamo:

[mapView removeAnnotations:mapView.annotations];

Todas las anotaciones se eliminan.

¿De qué manera puedo verificar (como un bucle for en todas las anotaciones) si la anotación no es la anotación de puntos azules?

EDITAR (He resuelto con esto):

for (int i =0; i < [mapView.annotations count]; i++) { 
    if ([[mapView.annotations objectAtIndex:i] isKindOfClass:[MyAnnotationClass class]]) {                      
         [mapView removeAnnotation:[mapView.annotations objectAtIndex:i]]; 
       } 
    }
¿Fue útil?

Solución

Mirando a la Documentación de mkmapview, parece que tienes la propiedad de anotaciones para jugar. Debería ser bastante simple iterar a través de esto y ver qué anotaciones tienes:

for (id annotation in myMap.annotations) {
    NSLog(@"%@", annotation);
}

También tienes el userLocation Propiedad que le brinda la anotación que representa la ubicación del usuario. Si pasa por las anotaciones y recuerda todas las que no son la ubicación del usuario, puede eliminarlas usando el removeAnnotations: método :

NSInteger toRemoveCount = myMap.annotations.count;
NSMutableArray *toRemove = [NSMutableArray arrayWithCapacity:toRemoveCount];
for (id annotation in myMap.annotations)
    if (annotation != myMap.userLocation)
        [toRemove addObject:annotation];
[myMap removeAnnotations:toRemove];

Espero que esto ayude,

Sam

Otros consejos

Si te gusta rápido y simple, hay una manera de filtrar una matriz de la anotación de MkuserLocation. Puede pasar esto a MKMapView's RemoveanNotations: Function.

 [_mapView.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]];

Supongo que esto es más o menos lo mismo que los filtros manuales publicados anteriormente, excepto que usa un predicado para hacer el trabajo sucio.

Tuve este mismo problema e intenté una solicitud de HTTP y verificar el método de resultados (ejemplo aquí) como una solución, funciona, pero fue un poco lento para revisar una gran cantidad de sitios a la vez.Terminé usando la función de caché de sitios invalidate como arriba como esta:

public bool SPSiteReallyExists(string url) {
    SPSite.InvalidateCacheEntry(new Uri(url), Guid.Empty);
    return SPSite.Exists(uri);
}

Este código ha estado en producción durante muchos meses y no ha habido problemas con SPSITE.Extistas que regresan verdaderos cuando debe devolverse falso después de una eliminación del sitio, generalmente a través de la interfaz de usuario, pero a veces también a través de C # API.

No he visto ningún impacto de rendimiento con el uso de esta llamada, y se llama alot como nunca uso. Existe () y siempre use este envoltorio.Lógicamente, no creo que hayalo, ya que solo invalida el caché para ese único sitio.Sin embargo, la API de SharePoint no siempre sigue la lógica ...

La forma más corta de limpiar todas las anotaciones y preservar la anotación de la clase MkuserLocation

[self.mapView removeAnnotations:self.mapView.annotations];
SPSite site;
SPWeb web;
SPSecurity.RunWithElevatedPriviliges(delegate()
{
    site = new SPSite([url]);
    web = site.AllWebs.Add("sitename", "title", "description", 1033, "STS#1", false, false);
});

Esto debería hacer el truco, simplemente darle el nombre del sitio y SharePoint manejará el resto :)

Es más fácil hacer lo siguiente:

NSMutableArray *annotationsToRemove = [NSMutableArray arrayWithCapacity:[self.mapView.annotations count]];
    for (int i = 1; i < [self.mapView.annotations count]; i++) {
        if ([[self.mapView.annotations objectAtIndex:i] isKindOfClass:[AddressAnnotation class]]) {
            [annotationsToRemove addObject:[self.mapView.annotations objectAtIndex:i]];
            [self.mapView removeAnnotations:annotationsToRemove];
        }
    }

[self.mapView removeAnnotations:annotationsToRemove];

He visto este código y tal vez lo ayude, su JavaScript.

document.execCommand('enableObjectResizing', false, false);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top