He encontrado una manera mejor sería subclase MKUserLocation:
class SimulatedUserLocation: MKUserLocation {
private var simulatedCoordinate = CLLocationCoordinate2D(latitude: 39, longitude: -76)
override dynamic var coordinate: CLLocationCoordinate2D {
get {
return simulatedCoordinate
}
set {
simulatedCoordinate = newValue
}
}
}
A continuación, agregarlo como una anotación mapView.addAnnotation(SimulatedUserLocation()). (También puede ser que desee ocultar la ubicación real de la primera mapView.showsUserLocation = false)
iOS haría que la anotación exactamente igual que la ubicación real del usuario.
dynamic se utiliza en la propiedad por lo que el cambio de coordenadas desencadena MVA y lo mueve en el mapa.