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