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. Hàm đóng nhận placeId (String) được nhấn và trả về một 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)
}
}