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