スポットを操作する

タップすると画面下部に場所の詳細を示す小さなポップオーバーが表示されることを示す写真。

ユーザーが Map でスポット(POI)をタップすると、Maps 3D SDK for iOS(GoogleMaps3DKit)にそのスポットの Place Widget が表示されます。タップイベントをリッスンし、onTap(_:)、onPlaceTap(_:)、placeInformationEnabled(_:) を使用してこのウィジェットの表示を制御できます。

タップイベントをリッスンする

Map でタップイベントをリッスンするには、onTap(_:) 修飾子を適用します。

ユーザーが地図をタップすると、クロージャは次のプロパティを含む MapTapInfo オブジェクトを受け取ります。

Places UI ウィジェットを制御する

場所がタップされたときに組み込みの Places UI ウィジェットを表示するかどうかを制御するには、onPlaceTap(_:) を Map に適用します。クロージャは、タップされた placeId(String)を受け取り、PlaceTapAction を返します。

  • Return .default: 組み込みの Places UI ウィジェットを表示します。
  • Return .none: 組み込みの Places UI ウィジェットを抑制します。

次の例では、タップイベントをリッスンし、デフォルトの Places UI ウィジェットを抑制しています。

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 で POI をタップしたときに組み込みの場所情報カードが表示されないようにするには、false を placeInformationEnabled(_:) に渡します。

import GoogleMaps3DKit
import SwiftUI

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