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

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

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

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