Custom Waypoint arrival screen

Customize the arrival experience to enhance user engagement and control during their navigation journey.

This example shows:

  • How to customize the arrival screen when arriving at a waypoint of the route

  • In the example code, arrival screen will show the waypoint name and user could choose to continue navigating to next waypoint

documentation image

For all code examples, refer to Navigation Code Examples

CustomWaypointScreenController view source

1
import UIKit
2
import NbmapNavigation
3
import NbmapCoreNavigation
4
import NbmapDirections
5
6
class CustomWaypointScreenController: UIViewController {
7
8
override func viewDidLoad() {
9
super.viewDidLoad()
10
11
let origin = CLLocation(latitude: 37.77440680146262, longitude: -122.43539772352648)
12
let waypoint = CLLocation(latitude: 37.76856957793795, longitude: -122.42709811526268)
13
let destination = CLLocation(latitude: 37.76556957793795, longitude: -122.42409811526268)
14
let options = NavigationRouteOptions(locations: [origin,waypoint,destination])
15
Directions.shared.calculate(options) { [weak self] routes, error in
16
guard let strongSelf = self else {
17
return
18
}
19
guard error == nil else {
20
print(error!)
21
return
22
}
23
24
guard let routes = routes else { return }
25
26
let navigationService = NBNavigationService(routes: routes, routeIndex: 0, simulating : simulationIsEnabled ? SimulationMode.always : SimulationMode.onPoorGPS)
27
28
let navigationOptions = NavigationOptions(navigationService: navigationService)
29
30
let navigationViewController = NavigationViewController(for: routes,navigationOptions: navigationOptions)
31
navigationViewController.modalPresentationStyle = .fullScreen
32
navigationViewController.delegate = self
33
34
// Start navigation
35
strongSelf.present(navigationViewController, animated: true, completion: nil)
36
}
37
}
38
}
39
40
extension CustomWaypointScreenController : NavigationViewControllerDelegate {
41
func navigationViewController(_ navigationViewController: NavigationViewController, didArriveAt waypoint: Waypoint) -> Bool {
42
let isFinalLeg = navigationViewController.navigationService.routeProgress.isFinalLeg
43
if isFinalLeg {
44
return true
45
}
46
47
let alert = UIAlertController(title: "Arrived at \(waypoint.name ?? "Unknown").", message: "Would you like to continue?", preferredStyle: .alert)
48
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { _ in
49
// Begin the next leg once the driver confirms
50
guard !isFinalLeg else { return }
51
navigationViewController.navigationService.router.routeProgress.legIndex += 1
52
navigationViewController.navigationService.start()
53
}))
54
navigationViewController.present(alert, animated: true, completion: nil)
55
56
return false
57
}
58
}

This class is a view controller that allows users to navigate to a destination with waypoints. The class has the following properties:

  • origin: The origin location of the navigation.

  • waypoint: The waypoint location of the navigation.

  • destination: The destination location of the navigation.

  • routes: An array of Route objects that represent the routes between the origin, waypoint, and destination.

  • navigationService: A NBNavigationService object that is used to control the navigation.

  • navigationViewController: A NavigationViewController object that is used to display the navigation.

The class has the following methods:

  • viewDidLoad(): This method is called when the view controller is loaded. In this method, the navigation service is created and configured.

  • didArriveAtWaypoint(): This method is called when the navigation service arrives at a waypoint. In this method, an alert is presented to the user asking if they would like to continue to the next waypoint.

The code you provided also has an extension:

  • CustomWaypointScreenController: NavigationViewControllerDelegate

This extension conforms the CustomWaypointScreenController class to the NavigationViewControllerDelegate protocol. This protocol allows the CustomWaypointScreenController class to respond to events from the navigation controller.

ios-sdk-7

© 2024 NextBillion.ai all rights reserved.