โต้ตอบกับจุดที่น่าสนใจ

รูปภาพแสดงป๊อปโอเวอร์ขนาดเล็กพร้อมรายละเอียดสถานที่ที่ด้านล่างของหน้าจอซึ่งเป็นผลมาจากการแตะ

เมื่อผู้ใช้แตะจุดสนใจ (POI) บน Map นั้น Maps 3D SDK สำหรับ iOS (GoogleMaps3DKit) จะแสดง วิดเจ็ตสถานที่สำหรับ POI นั้น คุณสามารถรอรับเหตุการณ์การแตะและควบคุมว่าจะแสดงวิดเจ็ตนี้หรือไม่ โดยใช้ onTap(_:), onPlaceTap(_:), และ placeInformationEnabled(_:)

รอรับเหตุการณ์การแตะ

หากต้องการรอรับเหตุการณ์การแตะบน Map ให้ใช้ ตัวแก้ไข onTap(_:)

เมื่อผู้ใช้แตะแผนที่ ปิดจะได้รับa MapTapInfo ออบเจ็กต์ที่มีพร็อพเพอร์ตี้ต่อไปนี้

  • location: The LatLngAltitude ที่แสดงพิกัดทางภูมิศาสตร์และความสูงของการแตะ
  • content: ค่า MapTapInfo.Content ที่ระบุสิ่งที่ถูกแตะ:
    • MapTapInfo.Content.map: การแตะโดนแผนที่ฐาน
    • MapTapInfo.Content.place(id:): การแตะโดนสถานที่ โดยระบุรหัสสถานที่ที่ไม่ซ้ำกัน (String)

ควบคุมวิดเจ็ต UI Places

หากต้องการควบคุมว่าจะแสดงวิดเจ็ต UI สถานที่ในตัวหรือไม่เมื่อมีการแตะสถานที่ ให้ใช้ onPlaceTap(_:) กับ Map ปิดจะได้รับ placeId (String) ที่แตะและแสดงผล PlaceTapAction ดังนี้

  • แสดงผล .default: แสดงวิดเจ็ต UI สถานที่ในตัว
  • Return .none: ไม่แสดงวิดเจ็ต UI Places ในตัว

ตัวอย่างต่อไปนี้จะรอกิจกรรมสำหรับการแตะและไม่แสดงวิดเจ็ต UI 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)")
        }
      }
  }
}

หากต้องการปิดใช้การ์ดข้อมูลสถานที่ในตัวสำหรับการแตะ POI ทั้งหมดบน Map ให้ส่ง false ไปยัง placeInformationEnabled(_:)

import GoogleMaps3DKit
import SwiftUI

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