I do not see where you defined the label to write the coordinates.
So you should create a Label in the view (in IB) and connect it to its IBOutlet (I call it positionLabel)
There is another big problem : userDistance() func is never called.
So, I had to guess you want to call it on pin. I refactored your code a little.
Finally, func names should start with lowercase and have more explicit names.
First, disconnect the button from the IBAction
change the name
Reconnect
Replace
@IBAction func Button(_ sender: UIButton) {
with (for instance)
@IBAction func buttonTapped(_ sender: UIButton) {
Here is the modified code.
If problem, please tell exactly where
1. import MapKit
2. import UIKit
3. import CoreLocation
4. import UserNotifications
5.
6. class ViewController: UIViewController, CLLocationManagerDelegate {
7.
8. @IBOutlet var mapView: MKMapView!
9. @IBOutlet private weak var positionLabel : UILabel! // <<< add this and connect to the label in IB
10.
11. let manager = CLLocationManager()
12.
13. override func viewDidLoad() {
14.
15. super.viewDidLoad()
16.
17. // Do any additional setup after loading the view.
18.
19. }
20.
21. override func viewDidAppear(_ animated: Bool) {
22.
23. super.viewDidAppear(animated)
24.
25. manager.desiredAccuracy = kCLLocationAccuracyBest // This should better be done in viewDidLoad
26. manager.delegate = self // This should better be done in viewDidLoad
27. manager.requestWhenInUseAuthorization()
28. manager.startUpdatingLocation()
29. }
30.
31. func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
32.
33. if let location = locations.first{
34. manager.stopUpdatingLocation()
35. render(location)
36. }
37.
38. func userDistance(from point: MKPointAnnotation) -> Double? { // >>> I took it outside for better readability
39.
40. guard let userLocation = mapView.userLocation.location else {
41. return nil // User location unknown!
42. }
43.
44. let pointLocation = CLLocation(
45. latitude: point.coordinate.latitude,
46. longitude: point.coordinate.longitude
47. )
48.
49. let value = userLocation.distance(from: pointLocation) // replace var by let, as never changed
50. return value
51. }
52.
53.
54. func render(_ location: CLLocation){
55.
56. let coordinate = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
57. let span = MKCoordinateSpan (latitudeDelta: 0.1, longitudeDelta: 0.1)
58. let region = MKCoordinateRegion(center: coordinate, span: span)
59. mapView.setRegion(region, animated: true)
60.
61. mapView.showsUserLocation = true
62.
63. let pin = MKPointAnnotation()
64.
65. pin.coordinate = coordinate
66. pin.title = "your home"
67. pin.subtitle = "Location"
68.
69. mapView.addAnnotation(pin)
70.
71. if let distance = userDistance(from: pin) { // >>> I call it here
72. positionLabel.text = String(distance)
73.
74. }
75. }
76. }
77.
78. @IBAction func buttonTapped(_ sender: UIButton) {
79.
80. UIApplication.shared.open(URL(string: "https://www.gps-coordinates.net")! as URL, options: [:], completionHandler: nil)
81.
82. }
83. }