📍 MapMetrics iOS Map Features Guide
This guide covers how to:
Add interactive markers
🔧 Prerequisites
Xcode installed (version 13 or newer recommended) A new or existing iOS project Add MapMetrics SDK to your project (via SPM or manual integration)
Example via Swift Package Manager:
: https://github.com/MapMetrics/MapMetrics-iOS
Setting Up the Map
In your ViewController.swift:
swift
class ViewController: UIViewController, MLNMapViewDelegate {
var mapView: MLNMapView!
var selectedAnnotation: MLNPointAnnotation?
var isMarkerSelected = false
override func viewDidLoad() {
super.viewDidLoad()
mapView = MLNMapView(
frame: view.bounds,
styleURL: URL(string: "<YOUR_STYLE_URL_HERE>")
)
mapView.delegate = self
view.addSubview(mapView)
mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
mapView.delegate = self
// This is a better starting position
let center = CLLocationCoordinate2D(latitude: 20.0, longitude: 0.0) // More centered globally
mapView.setCenter(center, zoomLevel: 2, animated: false) // Lower zoom to see more area
view.addSubview(mapView)
}
}
Add Tap-to-Drop Marker with Editable Title
swift
override func viewDidLoad() {
...
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(mapTapped(_:)))
mapView.addGestureRecognizer(tapGesture)
}
@objc func mapTapped(_ sender: UITapGestureRecognizer) {
let location = sender.location(in: mapView)
let coordinate = mapView.convert(location, toCoordinateFrom: mapView)
let marker = MLNPointAnnotation()
marker.coordinate = coordinate
marker.title = "Tap to add a name"
mapView.addAnnotation(marker)
}
Add support for selecting and editing markers:
swift
func mapView(_ mapView: MLNMapView, didSelect annotation: MLNAnnotation) {
guard let point = annotation as? MLNPointAnnotation else { return }
selectedAnnotation = point
}
// Handle tap gesture on the map
@objc func mapTapped(_ sender: UITapGestureRecognizer) {
// Only add a marker if no marker is currently selected
guard !isMarkerSelected else { return }
let location = sender.location(in: mapView)
let coordinates = mapView.convert(location, toCoordinateFrom: mapView)
addMarker(at: coordinates)
}
// Add marker to the map at specific coordinates
func addMarker(at coordinates: CLLocationCoordinate2D) {
let marker = MLNPointAnnotation()
marker.coordinate = coordinates
marker.title = "Tap to add a name" // Default title
// Add the marker to the map
mapView.addAnnotation(marker)
}
// Handle deselecting a marker (hide info view)
func mapView(_ mapView: MLNMapView, didDeselect annotation: MLNAnnotation) {
if annotation === selectedAnnotation {
isMarkerSelected = false
selectedAnnotation = nil
}
}
// MARK: - UITextFieldDelegate
extension ViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
// When the user presses "done", update the marker's title with the text entered
if let selectedAnnotation = selectedAnnotation, let newName = textField.text, !newName.isEmpty {
selectedAnnotation.title = newName
}
return true
}
}