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