Не работает NMANavigationManagerDelegate в ЗДЕСЬ Карта iOS SDK - PullRequest
0 голосов
/ 04 июня 2019

Я использую HERE iOS SDK и внедряю пошаговую навигацию, но метод didUpdateManeuvers из NMANavigationManagerDelegate или любой другой не вызывается.

Когда я пытаюсь смоделировать движение и использовать:

let source = NMARoutePositionSource(route: route.route)
NMAPositioningManager.sharedInstance().dataSource = source 

все работает нормально, но когда я имитирую перемещение по GPX файлу или тест вживую, методы делегата не вызываются ...

Мой код:

class HereMapViewController: UIViewController {

    @IBOutlet private weak var mapView: NMAMapView!

    fileprivate var navigationManager = NMANavigationManager.sharedInstance()
    var route : NMAMapRoute?


    // MARK: - life cycle

    override func viewDidLoad() {
        super.viewDidLoad()

        setupUI()
    }

    deinit {
        navigationManager.stop()
    }


    // MARK: - private

    private func setupUI() {
        mapView.copyrightLogoPosition = .center
        mapView.zoomLevel = 10
        mapView.positionIndicator.isVisible = true
        mapView.gestureDelegate = self
        navigationManager.voicePackageMeasurementSystem = NMAMeasurementSystem.imperialUS
        navigationManager.backgroundNavigationEnabled = true
        navigationManager.isVoiceEnabled = true

        navigationManager.delegate = self
        setupRoute()
    }

    private func setupRoute() {
        guard let mapRoute = route, let routeStart = mapRoute.route.start else {
                return
        }

        let start = NMAGeoCoordinates(latitude: routeStart.navigablePosition.latitude,
                                      longitude: routeStart.navigablePosition.longitude)

        mapView.add(mapObject: mapRoute)
        mapView.set(boundingBox: mapRoute.route.boundingBox!, animation: NMAMapAnimation.none)

        startNavigation()
        mapView.set(geoCenter: start, animation: .none)
    }
    private func startNavigation() {
        guard let route = route else {
            return
        }

        navigationManager.map = mapView
        NMAPositioningManager.sharedInstance().dataSource = NMAHEREPositionSource()
        navigationManager.startTurnByTurnNavigation(route.route)
        navigationManager.mapTrackingEnabled = false
        navigationManager.mapTrackingAutoZoomEnabled = false
        navigationManager.mapTrackingOrientation = .dynamic
        navigationManager.isSpeedWarningEnabled = true

    }
}


//MARK: - NMANavigationManagerDelegate

extension HereMapViewController : NMANavigationManagerDelegate {
    // Signifies that there is new instruction information available
    func navigationManager(_ navigationManager: NMANavigationManager, didUpdateManeuvers currentManeuver: NMAManeuver?, _ nextManeuver: NMAManeuver?) {
        print("didUpdateManeuvers")
    }

    // Signifies that the system has found a GPS signal
    func navigationManagerDidFindPosition(_ navigationManager: NMANavigationManager) {
        print("New position has been found")
    }

    func navigationManager(_ navigationManager: NMANavigationManager, didFindAlternateRoute routeResult: NMARouteResult) {
        print("didFindAlternateRoute")
    }

    func navigationManager(_ navigationManager: NMANavigationManager, didUpdateRoute routeResult: NMARouteResult) {
        print("didUpdateRoute")
    }
}


//MARK: - NMAMapGestureDelegate

extension HereMapViewController : NMAMapGestureDelegate {

    func mapView(_ mapView: NMAMapView, didReceiveTwoFingerPan translation: CGPoint, at location: CGPoint) {
        navigationManager.mapTrackingAutoZoomEnabled = false
    }
}

Я хочу отслеживать, когда мне нужно сменить маневр или когда мне нужно создать новый маршрут, если пользователь пошел по неправильному пути. Буду благодарен за помощь.

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Ваш фрагмент работает на меня. Убедитесь, что вы не получили никаких ошибок консоли:

Access to this operation is denied.

или

This app has attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain both “NSLocationAlwaysAndWhenInUseUsageDescription” and “NSLocationWhenInUseUsageDescription” keys with string values explaining to the user how the app uses this data

NMAHEREPositionSource требует NSMotionUsageDescription ключ для установки в Info.plist. Вы можете проверить, работает ли NMADevicePositionSource .

Чтобы смоделировать движение с помощью файла GPX, используйте NMALoggedPositionSource

Для принудительной трансляции позиционирования вы можете использовать startPosition

0 голосов
/ 05 июня 2019

Вы должны убедиться, что вы правильно установили свой класс, чтобы получить поведение делегата.

Проверьте ответы на этот вопрос, особенно второй от MakeAppPie. Делегаты по-быстрому?

Убедитесь, что вы выполнили все шаги.

...