Tương tác với các địa điểm yêu thích

Ảnh chụp một cửa sổ bật lên nhỏ có thông tin chi tiết về địa điểm ở cuối màn hình sau khi người dùng nhấn vào.

Khi người dùng nhấn vào một địa điểm yêu thích (POI) trên Map, SDK Maps 3D dành cho iOS (GoogleMaps3DKit) sẽ hiển thị một Place Widgets cho địa điểm yêu thích đó. Bạn có thể theo dõi các sự kiện nhấn và kiểm soát xem tiện ích này có được hiển thị hay không bằng cách sử dụng onTap(_:), onPlaceTap(_:) và placeInformationEnabled(_:).

Theo dõi sự kiện nhấn

Để theo dõi các sự kiện nhấn trên Map, hãy áp dụng công cụ sửa đổi onTap(_:).

Khi người dùng nhấn vào bản đồ, hàm đóng sẽ nhận được một đối tượng MapTapInfo chứa các thuộc tính sau:

Kiểm soát tiện ích giao diện người dùng Địa điểm

Để kiểm soát việc có hiển thị tiện ích giao diện người dùng Địa điểm tích hợp sẵn khi người dùng nhấn vào một địa điểm hay không, hãy áp dụng onPlaceTap(_:) cho Map. Closure nhận placeId (String) đã nhấn và trả về PlaceTapAction:

  • Return .default: Hiển thị tiện ích giao diện người dùng Địa điểm tích hợp sẵn.
  • Return .none: Ngăn chặn tiện ích giao diện người dùng Địa điểm tích hợp sẵn.

Ví dụ sau đây theo dõi các sự kiện nhấn và chặn tiện ích giao diện người dùng Địa điểm mặc định:

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)")
        }
      }
  }
}

Để tắt thẻ thông tin địa điểm tích hợp sẵn cho tất cả các lần nhấn vào địa điểm yêu thích trên Map, hãy truyền false đến placeInformationEnabled(_:):

import GoogleMaps3DKit
import SwiftUI

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