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

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

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

  • Сначала вы устанавливаете сеанс навигации независимо и получаете экземпляр навигатора через сеанс, а не путем вызова контроллера представления.
  • Вы настраиваете прослушиватель событий для реагирования на события навигации и управления ими.
  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`];