Fenêtres d'informations

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.
Sélectionnez une plate-forme: Android iOS JavaScript

Une fenêtre d'informations s'affiche sur un repère.

Une fenêtre d'informations vous permet d'afficher des informations présentées à l'utilisateur lorsqu'il appuie sur un repère.

Une fenêtre d'informations est orientée par rapport à l'écran de l'appareil, centrée au-dessus du repère qui lui est associé. La fenêtre d'informations par défaut contient le titre en gras, avec le texte de l'extrait sous le titre.

Le contenu de la fenêtre d'informations est défini par les propriétés title et snippet du repère. Si vous cliquez sur le repère, aucune fenêtre d'informations ne s'affiche si les propriétés title et snippet sont vides ou nil.

Une seule fenêtre d'informations s'affiche à la fois. Si un utilisateur appuie sur un autre repère, la fenêtre actuelle est masquée et la nouvelle fenêtre d'informations s'ouvre. Si l'utilisateur clique sur un repère qui affiche actuellement une fenêtre d'informations, celle-ci se ferme et s'ouvre de nouveau.

Créez une fenêtre d'informations personnalisée pour ajouter du texte ou des images. Une fenêtre d'informations personnalisée vous permet de contrôler complètement l'apparence de la fenêtre pop-up.

Ajouter une fenêtre d'informations

L'extrait suivant crée un repère simple, avec uniquement un titre pour le texte de la fenêtre d'informations.

Swift

let position = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127)
let london = GMSMarker(position: position)
london.title = "London"
london.map = mapView
      

Objective-C

CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127);
GMSMarker *london = [GMSMarker markerWithPosition:position];
london.title = @"London";
london.map = mapView;
      

Avec la propriété snippet, vous pouvez ajouter du texte qui s'affichera sous le titre dans une police plus petite. Les chaînes plus longues que la fenêtre d'informations sont automatiquement encapsulées sur plusieurs lignes. Les messages très longs peuvent être tronqués.

Swift

london.title = "London"
london.snippet = "Population: 8,174,100"
london.map = mapView
      

Objective-C

london.title = @"London";
london.snippet = @"Population: 8,174,100";
london.map = mapView;
      

Afficher/Masquer une fenêtre d'informations

Les fenêtres d'informations sont conçues pour répondre aux événements tactiles du repère. Vous pouvez afficher ou masquer une fenêtre d'informations par programmation en définissant la propriété selectedMarker de GMSMapView:

  • Définissez selectedMarker sur le nom du repère pour l'afficher.
  • Définissez selectedMarker sur nil pour le masquer.

Swift

london.title = "London"
london.snippet = "Population: 8,174,100"
london.map = mapView
// Show marker
mapView.selectedMarker = london
// Hide marker
mapView.selectedMarker = nil
      

Objective-C

london.title = @"London";
london.snippet = @"Population: 8,174,100";
london.map = mapView;
// Show marker
mapView.selectedMarker = london;
// Hide marker
mapView.selectedMarker = nil;
      

Configurer une fenêtre d'informations pour qu'elle s'actualise automatiquement

Définissez tracksInfoWindowChanges sur le repère sur YES ou true si vous souhaitez que les nouvelles propriétés ou le contenu de la fenêtre d'informations s'affichent immédiatement après modification, plutôt que d'attendre que la fenêtre d'informations soit masquée, puis de nouveau affichée. La valeur par défaut est NO ou false.

Swift

london.tracksInfoWindowChanges = true
      

Objective-C

london.tracksInfoWindowChanges = YES;
      

Pour décider à quel moment définir la propriété tracksInfoWindowChanges, vous devez évaluer les considérations relatives aux performances par rapport aux avantages de redessiner automatiquement la fenêtre d'informations. Exemple :

  • Si vous devez apporter une série de modifications, vous pouvez remplacer la propriété par YES, puis revenir à NO.
  • Lorsqu'une animation est en cours d'exécution ou que le contenu est chargé de manière asynchrone, vous devez définir la propriété sur YES jusqu'à ce que les actions soient terminées.

Reportez-vous également aux remarques à prendre en compte lorsque vous utilisez la propriété iconView du repère.

Modifier la position d'une fenêtre d'informations

Une fenêtre d'informations est orientée par rapport à l'écran de l'appareil, centrée au-dessus du repère auquel elle est associée. Vous pouvez modifier la position de la fenêtre d'informations par rapport au repère en définissant la propriété infoWindowAnchor. Cette propriété accepte un CGPoint, défini comme un décalage (x,y), où x et y sont compris entre 0,0 et 1,0. Le décalage par défaut est (0,5, 0,0), c'est-à-dire au centre du haut. Définir le décalage infoWindowAnchor est utile pour aligner la fenêtre d'informations sur une icône personnalisée.

Swift

london.infoWindowAnchor = CGPoint(x: 0.5, y: 0.5)
london.icon = UIImage(named: "house")
london.map = mapView
      

Objective-C

london.infoWindowAnchor = CGPointMake(0.5, 0.5);
london.icon = [UIImage imageNamed:@"house"];
london.map = mapView;
      

Gérer les événements sur les fenêtres d'informations

Vous pouvez écouter les événements suivants de la fenêtre d'informations:

Pour écouter des événements, vous devez implémenter le protocole GMSMapViewDelegate. Consultez le guide des événements et la liste des méthodes sur le GMSMapViewDelegate.

GitHub inclut des exemples qui montrent comment gérer les événements de la fenêtre d'informations:

Fenêtres d'informations personnalisées

Personnalisez le contenu des fenêtres d'informations en créant une sous-classe de UIView qui définit la mise en page de la fenêtre d'informations personnalisée. Dans cette sous-classe, définissez la vue comme vous le souhaitez. Par exemple, vous pouvez utiliser des instances UILabel personnalisées pour afficher le titre et le texte des extraits, ainsi que d'autres vues, telles que des instances UIImageView, pour ajouter des images affichées dans la fenêtre d'informations.

Assurez-vous que votre ViewController implémente le protocole GMSIndoorDisplayDelegate et définit un écouteur pour l'événement mapView:markerInfoWindow : Cet écouteur d'événement est appelé lorsqu'un repère est sur le point de être sélectionné. Il vous permet de renvoyer une instance de votre classe UIView personnalisée afin de définir la fenêtre d'informations personnalisée utilisée par le repère.

Les images ci-dessous montrent une fenêtre d'informations par défaut, une fenêtre d'informations avec du contenu personnalisé, et une fenêtre d'informations avec un cadre et un arrière-plan personnalisés.

Comparaison des fenêtres d'informations

Les exemples de code sur GitHub fournis avec le SDK Maps pour iOS incluent des exemples de fenêtres d'informations personnalisées. Par exemple, reportez-vous à la définition de MarkerInfoWindowViewController.m (Objective-C) ou de MarkerInfoWindowViewController.swift (Swift).

Consultez les exemples de code pour en savoir plus sur le téléchargement et l'exécution de ces exemples.