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