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 é exibido usando onTap(_:), onPlaceTap(_:) e placeInformationEnabled(_:).

Detectar eventos de toque

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

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

Controlar o widget da interface do Places

Para controlar se o widget de interface integrado do Places é exibido quando um lugar é tocado, aplique onPlaceTap(_:) a Map. O closure 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 de IU padrão 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 de lugar integrado para todos os toques em PDIs em um Map, transmita false para placeInformationEnabled(_:):

import GoogleMaps3DKit
import SwiftUI

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