NMANavigationManagerDelegate 在 HERE Map iOS SDK 中不起作用
Not works NMANavigationManagerDelegate in HERE Map iOS SDK
我正在使用 HERE iOS SDK 并且我正在实施逐向导航,但是未调用 NMANavigationManagerDelegate
的方法 didUpdateManeuvers
或任何其他方法。
当我尝试模拟移动和使用时:
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
}
}
我想跟踪,如果用户走错了路,什么时候应该改变机动或者什么时候需要创建新路线。我将不胜感激。
您需要确保正确设置 class 以接收委托行为。
查看此问题的答案,尤其是来自 MakeAppPie 的第二个答案。 Delegates in swift?
确保您已完成所有步骤。
你的代码片段对我有用。确保您没有收到任何控制台错误:
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 requires NSMotionUsageDescription key to be set in Info.plist. You can check if NMADevicePositionSource 适合你。
要使用 GPX 文件模拟运动,请使用 NMALoggedPositionSource
强制定位广播,可以使用startPositioning
我正在使用 HERE iOS SDK 并且我正在实施逐向导航,但是未调用 NMANavigationManagerDelegate
的方法 didUpdateManeuvers
或任何其他方法。
当我尝试模拟移动和使用时:
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
}
}
我想跟踪,如果用户走错了路,什么时候应该改变机动或者什么时候需要创建新路线。我将不胜感激。
您需要确保正确设置 class 以接收委托行为。
查看此问题的答案,尤其是来自 MakeAppPie 的第二个答案。 Delegates in swift?
确保您已完成所有步骤。
你的代码片段对我有用。确保您没有收到任何控制台错误:
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 requires NSMotionUsageDescription key to be set in Info.plist. You can check if NMADevicePositionSource 适合你。
要使用 GPX 文件模拟运动,请使用 NMALoggedPositionSource
强制定位广播,可以使用startPositioning