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

docs-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.