J'intègre Google Maps SDK. Tout fonctionne bien. Mais comment supprimer un marqueur particulier (Point Pin) lorsque la seconde apparaîtra (je n'utilise pas Mapkit)
Je veux ce qui suit:
Si je tape sur la carte, une broche est générée à cet emplacement si je tape sur un autre emplacement sur la carte, deux broches sont affichées, mais je souhaite supprimer l'ancienne broche.
J'utilise aussi
[self.mapView clear];
Mais il était clair que tous les autres points de repère de GMSMapview.
Voici le code pour ajouter un pin sur la carte:
GMSMapView *mapView;
GMSMarker *currLocMarker = [[GMSMarker alloc] init];
currLocMarker.map = nil;
[currLocMarker setTitle:NSLocalizedString(@"current_location_title", nil)];
currLocMarker.icon = [UIImage imageNamed:@"pin_fetch_location.png"];
currLocMarker.position = CLLocationCoordinate2DMake(pCoordinate.latitude, pCoordinate.longitude);
currLocMarker.map = self.mapView;
S'il vous plaît, aidez-moi à résoudre ce problème .. !!
Merci d'avance..:)
Oui, j'ai cette solution. Ajoutez une épingle comme suit:
- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinates {
pCoordinate.latitude =coordinates.latitude;
pCoordinate.longitude =coordinates.longitude;
[[GMSGeocoder geocoder] reverseGeocodeCoordinate:CLLocationCoordinate2DMake(coordinates.latitude, coordinates.longitude) completionHandler:^(GMSReverseGeocodeResponse *resp, NSError *error)
{
[currLocMarker setTitle:NSLocalizedString(@"current_location_title", nil)];
currLocMarker.icon = [UIImage imageNamed:@"pin.png"];
currLocMarker.position = CLLocationCoordinate2DMake(coordinates.latitude, coordinates.longitude);
currLocMarker.map = self.mapView;} ] ;}
Veuillez supprimer la ligne suivante si vous avez utilisé ce qui précède:
GMSMarker *currLocMarker = [[GMSMarker alloc] init];
Pour supprimer une broche particulière de GMSMapView, conservez la référence de la broche (s'il y en a plusieurs, utilisez array), puis utilisez ce code
currLocMarker.map = nil;
Pour supprimer toutes les choses, y compris les broches de lignes poly de GMSMapView, utilisez ce code
[ _mapView clear];
J'ai fait comme ça:
GMSMarker *myMarker;
- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
if (myMarker) {
myMarker.map = nil;
myMarker = nil;
}
myMarker = [[GMSMarker alloc] init];
myMarker.position = CLLocationCoordinate2DMake(coordinate.latitude, coordinate.longitude);
myMarker.title = @"title";
myMarker.map = mapView_;
}];
}
et a bien fonctionné pour moi!
Cochez cette case et essayez-la dans votre code
Cela a fonctionné pour moi -
func removeMarkers(mapView: GMSMapView){
for (index, _) in markers.enumerate() {
//print("Item \(index): \(element)")
self.markers[index].map = nil
}
}
où
var markers = [GMSMarker]()
les marqueurs contiennent toutes les superpositions de marqueurs pour la carte
Lorsque vous appuyez sur un marqueur spécifique, cela supprimera ce marqueur
- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker {
marker.map = nil;
return YES;
}
boucle tous les marqueurs de la carte, et vous pouvez utiliser le titre ou l'extrait de code pour choisir le marqueur à supprimer
comme map.markers n'est plus à utiliser dans google map ios sdk, vous devez disposer d'un nsmutablearray pour stocker tous les marqueurs à des fins de boucle
et vous pouvez utiliser userData du marqueur, marker.userData, que je préfère stocker une information nsdictionary dans le marqueur afin d’éviter la duplication du nom du titre.
à votre santé.