Interagire con i punti d'interesse

Foto che mostra un piccolo popover con i dettagli del luogo nella parte inferiore dello schermo, visualizzato dopo un tocco.

Quando un utente tocca un punto di interesse (PDI) su una Map, il Maps 3D SDK per iOS (GoogleMaps3DKit) visualizza un widget Places per quel PDI. Puoi ascoltare gli eventi di tocco e controllare se questo widget viene visualizzato utilizzando onTap(_:), onPlaceTap(_:), e placeInformationEnabled(_:).

Ascolta gli eventi di tocco

Per ascoltare gli eventi di tocco su un Map, applica il onTap(_:) modificatore.

Quando un utente tocca la mappa, la chiusura riceve un MapTapInfo oggetto contenente le seguenti proprietà:

Controlla il widget dell'interfaccia utente di Places

Per controllare se il widget dell'interfaccia utente di Places integrato viene visualizzato quando viene toccato un luogo, applica onPlaceTap(_:) a Map. La chiusura riceve l'placeId (String) toccato e restituisce un PlaceTapAction:

  • Restituisci .default: mostra il widget dell'interfaccia utente di Places integrato.
  • Restituisci .none: elimina il widget dell'interfaccia utente di Places integrato.

L'esempio seguente ascolta gli eventi di tocco ed elimina il widget dell'interfaccia utente di Places predefinito:

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)")
        }
      }
  }
}

Per disattivare la scheda informativa sul luogo integrata per tutti i tocchi dei PDI su un Map, passa false a placeInformationEnabled(_:):

import GoogleMaps3DKit
import SwiftUI

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