Ios 从MapKit获取中心坐标并显示在UILabel中

Ios 从MapKit获取中心坐标并显示在UILabel中,ios,swift,mapkit,Ios,Swift,Mapkit,我正在使用XCode 7.2和Swift 2.1开发一个iOS应用程序,我已经成功地在我的应用程序中实现了MapKit地图。地图将完美加载,并以用户的当前位置为中心 现在,如果用户将地图的中心移动到新位置,我想检索中心坐标。按下按钮(参见所附gif中的“设置网格参考”按钮)即可“捕获”此新位置的坐标,并显示在标签中 我得到的最接近的答案是,我已经实现了这段代码,但是我仍然不知道如何通过单击我创建的IBOutlet按钮来用坐标更新标签 我错过了什么 任何帮助都将不胜感激-提前感谢 -------

我正在使用XCode 7.2和Swift 2.1开发一个iOS应用程序,我已经成功地在我的应用程序中实现了MapKit地图。地图将完美加载,并以用户的当前位置为中心

现在,如果用户将地图的中心移动到新位置,我想检索中心坐标。按下按钮(参见所附gif中的“设置网格参考”按钮)即可“捕获”此新位置的坐标,并显示在标签中

我得到的最接近的答案是,我已经实现了这段代码,但是我仍然不知道如何通过单击我创建的IBOutlet按钮来用坐标更新标签

我错过了什么

任何帮助都将不胜感激-提前感谢

----------------后续问题------------------

现在,我们已经解决了这个问题,我们用新的中心坐标填充了标签,我还有一个问题-很可能是noob疏忽,但我在这里正处于一个陡峭的学习曲线上,所以请耐心等待我

我们已经成功地确定了中心坐标,现在在我们创建的函数中,它们被设置为地图经度地图纬度

我还有两个其他变量(newTargetLongnewTargetLat),它们构成将传递给下一个视图控制器的值数组的一部分,我想:

let newTargetLong = mapLongitude
let newTargetLat = mapLatitude
这样就可以使用
.append
指令将新的纬度和经度添加到数组中


但出于某种原因,我无法从该函数中“取出”这两个值。我需要做些什么才能做到这一点?

在类的顶部声明
var center=“”
,并使用其他声明。在下面的方法中,它应该自动更改
中心的值

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    center = mapView.centerCoordinate
}
按下按钮时,将标签的值设置为中心值

self.yourLabelName.text = center
要显示为“纬度:…经度:…”,请执行以下操作:

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    let mapLatitude = mapView.centerCoordinate.latitude
    let mapLongitude = mapView.centerCoordinate.longitude
    center = "Latitude: \(mapLatitude) Longitude: \(mapLongitude)"
    print(center)
    self.yourLabelName.text = center
}
如果要格式化坐标以显示更友好的内容:

center = "\(String(format: "%.5f", mapLatitude)), \(String(format: "%.5f", mapLongitude))"

根据您对小数位数的偏好调整%.5f。

首先,我假设:您不确定何时何地更新标签文本(您创建的)

然后,根据您的链接帖子,了解如何获取当前中心坐标, 我想你可以试着在这个有趣的地方加上一句话:

 func mapView(mapView: MKMapView, regionDidChangeAnimated animated:     Bool) {
var center = mapView.centerCoordinate
#add a line here to update the label
} 

由于每次用户重新居中地图时,都会调用此委托函数,标签将自动更新为当前的新中心坐标。

好的,所以我对@AppDevGuy提供的代码进行了一些小改动。以下是我所做的:

func mapView(myMap: MKMapView, regionDidChangeAnimated animated: Bool) {

    let center = myMap.centerCoordinate

    let mapLatitude = center.latitude
    let mapLongitude = center.longitude
    let latAndLong = "Lat: \(mapLatitude) \nLong: \(mapLongitude)"

    self.TargetGridReference.text = latAndLong
}
按下按钮时:

@IBAction func SetTargetGridReference(sender: UIButton) {

    return mapView(myMap, regionDidChangeAnimated: true)
}
UILabel中的输出如下所示:

Lat: -34.5678901234567
Long: 19.1234567890123
我不确定这是笨重的还是优雅的,但它很有魅力!我已经检查了输出,坐标准确无误

由此产生的最后一个问题是:有没有办法将纬度和经度的值缩短到6位,而不是现在的13位


谢谢@AppDevGuy!衷心感谢

要缩短坐标,请使用“%.4f”格式。这里有一个例子,我用一根绳子做了一个拉长和缩短的坐标,我相信你能知道它是如何工作的

myLabel.text = "\(String(format: "%.4f", location.coordinate.latitude)), \(String(format: "%.4f", location.coordinate.longitude))"

这会将我所在位置的坐标打印到一个标签中。.4表示小数点后的位置。因此,您可以选择所需的任意数字,以显示坐标的长短。

谢谢,@app dev guy Quick question。将中心声明为变量时,它有什么类型?我已经按照您的指示进行了操作,并在标签上填充了以下内容:
CLLocationCoordinate2D(纬度:0.0,经度:0.0)
@JacoGriesel将很快作出响应。@JacoGriesel回答不正确,很快会回复您。@JacoGriesel感谢您的耐心等待。请看上面。我已经测试过了,它还可以工作。仍然在努力提高声誉,以便能够进行升级投票…:(但我一拿到它就回来!;-)不,它不起作用,@david hu。有什么建议吗?试着在这个函数中打印一些东西,看看它是否真的被调用了。如果你在重新居中映射时调用了这个函数,那么标签应该被更新。shoutout:-)