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:
location:LatLngAltitudeđại diện cho toạ độ địa lý và độ cao của lần nhấn.content: Giá trịMapTapInfo.Contentcho biết nội dung đã được nhấn:MapTapInfo.Content.map: Thao tác nhấn vào bản đồ cơ sở.MapTapInfo.Content.place(id:): Thao tác nhấn vào một địa điểm, cung cấp mã địa điểm duy nhất (String).
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)
}
}