Взаимодействие с достопримечательностями

Фотография, на которой показано небольшое всплывающее окно с информацией о месте в нижней части экрана, которое появляется после нажатия.

Когда пользователь нажимает на объект инфраструктуры в Map, Maps 3D SDK для iOS (GoogleMaps3DKit) показывает виджет Places для этого объекта. Вы можете отслеживать нажатия и управлять показом виджета с помощью onTap(_:), onPlaceTap(_:) и placeInformationEnabled(_:).

Отслеживание нажатий

Чтобы отслеживать нажатия на Map, примените модификатор onTap(_:).

Когда пользователь нажимает на карту, замыкание получает объект MapTapInfo, содержащий следующие свойства:

  • location – объект LatLngAltitude, представляющий географические координаты и высоту точки нажатия.
  • content – значение MapTapInfo.Content, которое указывает, на что нажал пользователь:

Управление виджетом 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)
  }
}