사용자가 Map에서 관심 장소 (POI)를 탭하면 iOS용 Maps 3D SDK (GoogleMaps3DKit)가 해당 관심 장소의 장소 위젯을 표시합니다. onTap(_:), onPlaceTap(_:), placeInformationEnabled(_:)를 사용하여 탭 이벤트를 수신 대기하고 이 위젯의 표시 여부를 제어할 수 있습니다.
탭 이벤트 수신 대기
Map에서 탭 이벤트를 수신하려면 onTap(_:) 수정자를 적용합니다.
사용자가 지도를 탭하면 클로저가 다음 속성을 포함하는 MapTapInfo 객체를 수신합니다.
location: 탭의 지리적 좌표와 고도를 나타내는LatLngAltitude입니다.content: 탭된 항목을 나타내는MapTapInfo.Content값입니다.MapTapInfo.Content.map: 탭이 기본 지도에 도달했습니다.MapTapInfo.Content.place(id:): 탭이 장소에 도달하여 고유한 장소 ID (String)를 제공합니다.
장소 UI 위젯 제어
장소를 탭할 때 내장된 장소 UI 위젯이 표시되는지 여부를 제어하려면 onPlaceTap(_:)를 Map에 적용하세요. 클로저는 탭된 placeId (String)를 수신하고 PlaceTapAction를 반환합니다.
- Return
.default: 기본 제공되는 장소 UI 위젯을 표시합니다. - Return
.none: 기본 제공 장소 UI 위젯을 표시하지 않습니다.
다음 예에서는 탭 이벤트를 수신 대기하고 기본 장소 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에서 모든 관심 장소 탭에 대해 내장된 장소 정보 카드를 사용 중지하려면 false를 placeInformationEnabled(_:)에 전달합니다.
import GoogleMaps3DKit
import SwiftUI
struct ContentView: View {
var body: some View {
Map(mode: .hybrid)
.placeInformationEnabled(false)
}
}