Mit POIs interagieren

Foto, das ein kleines Pop-over mit Ortsdetails am unteren Bildschirmrand zeigt, das durch Tippen aufgerufen wurde.

Wenn ein Nutzer auf einer Map auf einen POI 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 festlegen, ob dieses Widget angezeigt wirdonTap(_:), onPlaceTap(_:), und placeInformationEnabled(_:).

Auf Tippereignisse warten

Wenn Sie auf Tippereignisse auf einer Map warten möchten, wenden Sie den onTap(_:) Modifikator an.

Wenn ein Nutzer auf die Karte tippt, empfängt die Closure ein MapTapInfo Objekt mit den folgenden Eigenschaften:

Places UI-Widget steuern

Wenn Sie festlegen möchten, ob das integrierte Places UI-Widget angezeigt wird, wenn auf einen Ort getippt wird, wenden Sie onPlaceTap(_:) auf Map an. Die Closure empfängt die getippte placeId (String) und gibt eine PlaceTapAction zurück:

  • .default zurückgeben: Das integrierte Places UI-Widget wird angezeigt.
  • .none zurückgeben: Das integrierte Places UI-Widget wird unterdrückt.

Im folgenden Beispiel wird auf Tippereignisse gewartet und das Standard-Places UI-Widget 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-Tipps 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)
  }
}