כשמשתמש לוחץ על נקודת עניין (POI) ב-Map, ערכת Maps 3D SDK ל-iOS (GoogleMaps3DKit) מציגה ווידג'ט של מקומות לאותה נקודת עניין. אתם יכולים להאזין לאירועי הקשה ולשלוט בהצגת הווידג'ט הזה באמצעות onTap(_:), onPlaceTap(_:) ו-placeInformationEnabled(_:).
האזנה לאירועי הקשה
כדי להאזין לאירועי הקשה ב-Map, צריך להחיל את המשתנה onTap(_:).
כשמשתמש מקיש על המפה, ה-closure מקבל אובייקט MapTapInfo שמכיל את המאפיינים הבאים:
-
location: הערך שלLatLngAltitudeשמייצג את הקואורדינטות הגיאוגרפיות והגובה של נקודת ההקשה. -
content: הערך שלMapTapInfo.Contentשמציין על מה המשתמש לחץ:-
MapTapInfo.Content.map: הלחיצה הייתה על המפה הבסיסית. -
MapTapInfo.Content.place(id:): הלחיצה הייתה על מקום, והיא מספקת את מזהה המקום הייחודי (String).
-
שליטה בווידג'ט של ממשק המשתמש של Places
כדי לקבוע אם הווידג'ט המובנה של ממשק המשתמש של Places יוצג כשלוחצים על מקום, צריך להחיל את onPlaceTap(_:) על Map. ה-closure מקבל את ה-placeId (String) שנלחץ ומחזיר PlaceTapAction:
- Return
.default: הצגת הווידג'ט המובנה של ממשק המשתמש של Places. - Return
.none: הסתרת הווידג'ט המובנה של ממשק המשתמש של Places.
בדוגמה הבאה, המערכת מאזינה לאירועי הקשה ומסתירה את הווידג'ט של ממשק המשתמש של 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)
}
}