Создайте индивидуальное руководство

На этой странице описываются основные шаги, которые необходимо выполнить для создания персонализированных руководств в рамках индивидуальной навигации .

Этот процесс отличается от процесса, описанного в разделе «Навигация по маршруту», следующим образом:

  • Сначала вы устанавливаете сеанс навигации независимо и получаете экземпляр навигатора через сеанс, а не путем вызова контроллера представления.
  • Вы настраиваете прослушиватель событий для реагирования на события навигации и управления ими.
  1. Создайте сеанс навигации с помощью GMSNavigationService.createNavigationSession и начните навигацию с вызова setDestination . Там, где навигационный опыт Google вызывает навигатор через представление навигационной карты, GMSNavigationServices управляет и получает поток событий из сеанса навигации независимо от экземпляра пользовательского интерфейса. Это означает, что он может либо работать без пользовательского интерфейса, либо передаваться в любой опыт на основе пользовательского интерфейса. При таком подходе сеанс навигации продолжает работать в вашем приложении, пока из него не будет удалена последняя ссылка.
  2. Установите поставщика местоположения с привязкой к дороге . Используйте поставщика местоположения, если вы хотите, чтобы ваше приложение имело непрерывный мониторинг местоположения, например, при отображении навигационного представления с синей точкой вдоль маршрута.
  3. Настройте слушателя для получения подробных пошаговых инструкций, внедрив протокол GMSNavigatorListener . Затем преобразуйте эту информацию во все, что необходимо для вашего пользовательского опыта навигации. Например:
    1. Реализуйте текстовые поля для простого отображения указаний на экране.
    2. Разработайте и заполните поля для своего собственного пользовательского интерфейса.
  4. Настройте навигационный симулятор . Это необходимо для разработки и тестирования.

Создать независимую навигационную сессию

Следующий фрагмент кода из демо показывает навигацию, установленную независимо от контроллера представления. Затем код добавляет обзорную карту, настроенную для отображения текущего местоположения, привязанного к дороге.

// 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`];