Interagir avec les points d'intérêt

Photo montrant une petite fenêtre pop-over avec les détails d'un lieu en bas de l'écran, qui s'affiche après avoir appuyé sur l'écran.

Lorsqu'un utilisateur appuie sur un point d'intérêt (POI) sur un Map, le SDK Maps 3D pour iOS (GoogleMaps3DKit) affiche un widget Places pour ce POI. Vous pouvez écouter les événements d'appui et contrôler si ce widget s'affiche à l'aide de onTap(_:), onPlaceTap(_:) et placeInformationEnabled(_:).

Écouter les événements d'appui

Pour écouter les événements de pression sur un Map, appliquez le modificateur onTap(_:).

Lorsqu'un utilisateur appuie sur la carte, la fermeture reçoit un objet MapTapInfo contenant les propriétés suivantes :

Contrôler le widget d'interface utilisateur Places

Pour contrôler si le widget d'interface utilisateur Places intégré s'affiche lorsqu'un utilisateur appuie sur un lieu, appliquez onPlaceTap(_:) à Map. La fermeture reçoit l'élément placeId (String) sur lequel l'utilisateur a appuyé et renvoie un PlaceTapAction :

  • Return .default : affiche le widget d'UI Places intégré.
  • Return .none : supprime le widget d'UI Places intégré.

L'exemple suivant écoute les événements de pression et supprime le widget d'interface utilisateur Places par défaut :

import GoogleMaps3DKit
import SwiftUI

struct ContentView: View {
  @State private var camera = Camera(center: .init(latitude: 37.7749, longitude: -122.4194))

  var body: some View {
    Map(camera: $camera, mode: .hybrid)
      .onPlaceTap { placeId in
        // Suppress the built-in Places UI widget
        .none
      }
      .onTap { tapInfo in
        switch tapInfo.content {
        case .map:
          print("Tapped map at \(tapInfo.location)")
        case .place(let placeId):
          print("Tapped place \(placeId) at \(tapInfo.location)")
        }
      }
  }
}

Pour désactiver la fiche d'informations sur un lieu intégrée pour tous les appuis sur un point d'intérêt sur un Map, transmettez false à placeInformationEnabled(_:) :

import GoogleMaps3DKit
import SwiftUI

struct ContentView: View {
  var body: some View {
    Map(mode: .hybrid)
      .placeInformationEnabled(false)
  }
}