Wenn ein Nutzer auf einen POI in einer Map tippt, zeigt das Maps 3D SDK for iOS (GoogleMaps3DKit) ein Places-Widget für diesen POI an. Sie können auf Tippereignisse warten und mit onTap(_:), onPlaceTap(_:) und placeInformationEnabled(_:) steuern, ob dieses Widget angezeigt wird.
Auf Tippereignisse warten
Wenn Sie auf Tipp-Ereignisse auf einem Map warten möchten, wenden Sie den Modifikator onTap(_:) an.
Wenn ein Nutzer auf die Karte tippt, erhält der Closure ein MapTapInfo-Objekt mit den folgenden Properties:
location: DieLatLngAltitude, die die geografischen Koordinaten und die Höhe des Tippens darstellen.content: DerMapTapInfo.Content-Wert, der angibt, worauf getippt wurde:MapTapInfo.Content.map: Die Basiskarte wurde angetippt.MapTapInfo.Content.place(id:): Der Ort, auf den getippt wurde, wird mit seiner eindeutigen Orts-ID (String) angegeben.
Places UI-Widget steuern
Wenn Sie festlegen möchten, ob das integrierte Places-UI-Widget angezeigt wird, wenn ein Ort angetippt wird, wenden Sie onPlaceTap(_:) auf Map an. Der Closure empfängt das angetippte placeId (String) und gibt ein PlaceTapAction zurück:
- Return
.default: Zeigt das integrierte Places UI-Widget an. - Return
.none: Das integrierte Places UI-Widget wird unterdrückt.
Im folgenden Beispiel wird auf Tippereignisse gewartet und das Standard-UI-Widget für Orte unterdrückt:
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)")
}
}
}
}
Wenn Sie die integrierte Ortsinformationskarte für alle POI-Tippaktionen auf einer Map deaktivieren möchten, übergeben Sie false an placeInformationEnabled(_:):
import GoogleMaps3DKit
import SwiftUI
struct ContentView: View {
var body: some View {
Map(mode: .hybrid)
.placeInformationEnabled(false)
}
}