Когда пользователь нажимает на объект инфраструктуры в Map, Maps 3D SDK для iOS (GoogleMaps3DKit) показывает виджет Places для этого объекта. Вы можете отслеживать нажатия и управлять показом виджета с помощью onTap(_:), onPlaceTap(_:) и placeInformationEnabled(_:).
Отслеживание нажатий
Чтобы отслеживать нажатия на Map, примените модификатор onTap(_:).
Когда пользователь нажимает на карту, замыкание получает объект MapTapInfo, содержащий следующие свойства:
location– объектLatLngAltitude, представляющий географические координаты и высоту точки нажатия.content– значениеMapTapInfo.Content, которое указывает, на что нажал пользователь:MapTapInfo.Content.map– нажатие на базовую карту.MapTapInfo.Content.place(id:)– нажатие на место, возвращает уникальный идентификатор места (String).
Управление виджетом Places UI
Чтобы управлять показом встроенного виджета Places UI при нажатии на место, примените onPlaceTap(_:) к Map. Замыкание получает нажатый объект placeId (String) и возвращает PlaceTapAction:
- Return
.default– показывает встроенный виджет Places UI. - Return
.none: подавляет встроенный виджет 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)")
}
}
}
}
Чтобы отключить встроенную информационную карточку места для всех нажатий на объекты инфраструктуры на объекте Map, передайте false в placeInformationEnabled(_:):
import GoogleMaps3DKit
import SwiftUI
struct ContentView: View {
var body: some View {
Map(mode: .hybrid)
.placeInformationEnabled(false)
}
}