בדף הזה מוסבר איך ליצור הנחיות בהתאמה אישית כחלק מחוויית ניווט בהתאמה אישית.
התהליך הזה שונה מהתהליך שמתואר במאמר איך מנווטים במסלול באופן הבא:
- קודם יוצרים סשן ניווט באופן עצמאי ומקבלים מופע של אובייקט navigator דרך הסשן, במקום לקרוא ל-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`];