Quando un utente tocca un punto d'interesse (PDI) su un
Map, l'
SDK Maps 3D per iOS (GoogleMaps3DKit) mostra 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
modificatore
onTap(_:).
Quando un utente tocca la mappa, la chiusura riceve un oggetto MapTapInfo contenente le seguenti proprietà:
location: ILLatLngAltitudeche rappresentano le coordinate geografiche e l'altitudine del rubinetto.content: il valoreMapTapInfo.Contentche indica cosa è stato toccato:MapTapInfo.Content.map: Il tocco ha colpito la mappa base.MapTapInfo.Content.place(id:): il tocco ha selezionato un luogo, fornendo il relativo ID luogo univoco (String).
Controlla il widget Places UI
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'oggetto placeId (String) toccato e restituisce un PlaceTapAction:
- Return
.default: mostra il widget UI di Places integrato. - Return
.none: elimina il widget dell'interfaccia utente di Places integrato.
L'esempio seguente rimane in ascolto degli eventi di tocco e sopprime 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 del 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)
}
}