Interagir com pontos de interesse

Foto mostrando um pequeno popover com Place Details na parte de baixo da tela, que aparece após um toque.

Quando um usuário toca em um ponto de interesse (PDI) em um Map, o SDK do Maps 3D para iOS (GoogleMaps3DKit) mostra um widget do Places para esse PDI. É possível detectar eventos de toque e controlar se esse widget é mostrado usando onTap(_:), onPlaceTap(_:), e placeInformationEnabled(_:).

Detectar eventos de toque

Para detectar eventos de toque em um Map, aplique o onTap(_:) modificador.

Quando um usuário toca no mapa, o fechamento recebe um MapTapInfo objeto que contém as seguintes propriedades:

Controlar o widget da interface do Places

Para controlar se o widget integrado da interface do Places é mostrado quando um lugar é tocado, aplique onPlaceTap(_:) a Map. O fechamento recebe o placeId (String) tocado e retorna um PlaceTapAction:

  • Retornar .default: mostra o widget integrado da interface do Places.
  • Retornar .none: suprime o widget integrado da interface do Places.

O exemplo a seguir detecta eventos de toque e suprime o widget padrão da interface do Places:

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

Para desativar o card de informações do lugar integrado para todos os toques de PDI em um Map, transmita false para placeInformationEnabled(_:):

import GoogleMaps3DKit
import SwiftUI

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