我使用的是HERE iOS SDK,我正在实现一个turn-by-turn导航,但是没有调用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
}
}
我想跟踪,当我应该改变操纵或当我需要创建一个新的路线,如果用户走错了路。我将感谢帮助。
3条答案
按热度按时间ctehm74n1#
您的代码段对我有效。请确保您没有收到任何控制台错误:
或
NMAHEREPositionSource要求在Info.plist中设置NSMotionUsageDescription密钥。您可以检查NMADevicePositionSource是否适用。
要使用GPX文件模拟运动,请使用NMALoggedPositionSource
要强制定位广播,可以使用startPositioning
mfpqipee2#
您需要确保正确设置类以接收委托行为。
查看此问题的答案,尤其是MakeAppPie中的第二个问题。Delegates in swift?
确保您已遵循所有步骤。
qlfbtfca3#
也许你错过了这条线
我也有同样的问题:/