تعامل با نقاط موردعلاقه

عکسی که پنجره بالاپر کوچکی را با جزئیات مکان در پایین صفحه نشان می‌دهد که درنتیجه تک‌ضرب زدن ظاهر شده است.

وقتی کاربر روی نقطه موردعلاقه (POI) در Map تک‌ضرب می‌زند، کیت توسعه نرم‌افزار Maps 3D ویژه iOS‏ (GoogleMaps3DKit) ابزاره «مکان‌ها» را برای آن نقطه موردعلاقه نمایش می‌دهد. می‌توانید به رویدادهای تک‌ضرب گوش دهید و بااستفاده از onTap(_:)، onPlaceTap(_:)، و placeInformationEnabled(_:) کنترل کنید که این ابزاره نمایش داده شود یا نه.

گوش دادن به رویدادهای تک‌ضرب زدن

برای گوش دادن به رویدادهای تک‌ضرب در Map، اصلاح‌کننده onTap(_:) را اعمال کنید.

وقتی کاربر روی نقشه تک‌ضرب می‌زند، بسته شدن یک شیء MapTapInfo دریافت می‌کند که حاوی ویژگی‌های زیر است:

کنترل کردن ابزاره میانای کاربر «مکان‌ها»

برای کنترل اینکه آیا ابزاره میانای کاربر «مکان‌های» داخلی هنگام تک‌ضرب زدن روی مکان نمایش داده شود یا نه، onPlaceTap(_:) را در Map اعمال کنید. The closure receives the tapped placeId (String) and returns a PlaceTapAction:

  • Return .default: ابزاره داخلی واسط کاربر «مکان‌ها» را نشان می‌دهد.
  • Return .none: ابزاره واسط کاربر داخلی 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، false را به placeInformationEnabled(_:) ارسال کنید:

import GoogleMaps3DKit
import SwiftUI

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