בדף הזה מפורטים השלבים הכלליים ליצירת הנחיות מותאמות אישית כחלק מחוויית ניווט בהתאמה אישית.
התהליך הזה שונה מהתהליך שמתואר בקטע ניווט במסלול, באופן הבא:
- קודם צריך ליצור סשן ניווט באופן עצמאי ולקבל מופע של ניווט דרך הסשן, במקום לקרוא ל-view controller.
- אתם מגדירים רכיב event listener כדי להגיב לאירועי ניווט ולנהל אותם.
יוצרים סשן ניווט באמצעות
GMSNavigationService.createNavigationSessionומתחילים את הניווט באמצעות קריאה ל-setDestination. בממשק הניווט של Google, הניווט מופעל דרך תצוגת המפה של הניווט, ואילוGMSNavigationServicesשולט בזרם האירועים מסשן הניווט ומקבל אותו בנפרד ממופע של ממשק המשתמש. כלומר, אפשר להריץ אותו בלי ממשק משתמש, או להעביר אותו לכל חוויה שמבוססת על ממשק משתמש. בגישה הזו, סשן הניווט ממשיך לפעול באפליקציה עד שההפניה האחרונה מוסרת ממנו.הגדרת ספק מיקום שמתאים לשימוש בכבישים. כדאי להשתמש בספק המיקום אם רוצים שהאפליקציה תבצע מעקב רציף אחרי המיקום, למשל כשמציגים תצוגת ניווט עם נקודה כחולה לאורך המסלול.
הגדרת מאזין להנחיות מפורטות באמצעות הטמעה של הפרוטוקול
GMSNavigatorListener. לאחר מכן, תוכלו להפוך את המידע הזה לכל מה שדרוש לכם כדי ליצור חוויית ניווט מותאמת אישית. לדוגמה:- הטמיעו שדות טקסט בלבד כדי להציג את המסלול בקלות על המסך.
- לעצב ולאכלס שדות בממשק המשתמש שלכם.
הגדרת סימולטור ניווט זה נדרש לפיתוח ולבדיקה.
יצירת סשן ניווט עצמאי
בקטע הקוד הבא מההדגמה מוצג ניווט שנוצר באופן עצמאי מבקר התצוגה. הקוד מוסיף מפת סקירה כללית שמוגדרת להצגת המיקום הנוכחי שצמוד לכביש.
// Create the navigation session.
_navigationSession = [GMSNavigationServices createNavigationSession];
GMSRoadSnappedLocationProvider *roadSnappedLocationProvider =
_navigationSession.roadSnappedLocationProvider;
[roadSnappedLocationProvider startUpdatingLocation];
GMSNavigator *navigator = _navigationSession.navigator;
[navigator addListener:self];
navigator.voiceGuidance = GMSNavigationVoiceGuidanceSilent;
navigator.sendsBackgroundNotifications = NO;
_navigationSession.started = YES;
[navigator setDestinations:@[ destination ]
callback:^(GMSRouteStatus routeStatus) {
// …handle changes in route status.
}];
// Add an overview map.
_mapView = [[GMSMapView alloc] initWithFrame:CGRectZero];
[self.mainStackView addArrangedSubview:_mapView];
[self.mainStackView setNeedsLayout];
_mapView.settings.compassButton = YES;
_mapView.delegate = self;
_mapView.myLocationEnabled = YES;
_mapView.roadSnappedMyLocationSource = roadSnappedLocationProvider;
העברת הניווט מחוויה בהתאמה אישית לחוויה של Google
קטע הקוד הזה ממחיש איך האפליקציה יכולה לאפשר למשתמש להיכנס לחוויית הניווט של Google מחוויית ניווט בהתאמה אישית. בקטע הקוד הזה אפשר לראות גם איך האפליקציה מבצעת את המעבר הזה בזמן שמשתפים את המפה.
`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];
[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];
`…`
[`_mapView enableNavigationWithSession:_navigationSession`];