MKMapView中心坐标不准确

Posted

技术标签:

【中文标题】MKMapView中心坐标不准确【英文标题】:MKMapView centerCoordinate not exact 【发布时间】:2015-01-03 18:43:22 【问题描述】:

当我尝试使用 MKMapView 的 centerCoordinate 在地图中心放置一个大头针时,它会将大头针大致放在中心,但它位于地图真正中心以南几个像素处。 p>

我尝试将地图的中心点转换为坐标 MKMapView.convertPoint(MKMapView.center) 并且在 ios8 上运行良好,但在 ios7 上仍然关闭(现在它位于真正中心的南部和西部)。

有人知道如何确定中心坐标有多“偏离”以便我可以调整吗?

我需要这个,因为我在地图上放置了一个十字准线图像,并且需要大头针出现在十字准线的中心。我已经用尺子验证了十字准线在地图的中心,它是关闭的大头针。

【问题讨论】:

【参考方案1】:

好吧,我仍然不知道为什么在 iOS7 中 MKMapView.convertPoint(MKMapView.center) 与 MKMapView.centerCoordinate 不同,但确实弄清楚了 .centerCoordinate 关闭的原因。

地图的一部分在状态栏下方,我根据可见部分统治中心,并以可见部分为中心覆盖图像,但地图计算中心是基于整个地图。因此,一旦我修复了不在状态栏下运行的地图 .centerCoordinate 就可以工作,并且在 iOS7 上,它比 MKMapView.center 工作得更好。

【讨论】:

【参考方案2】:

在your answer 中,您修复了中心坐标似乎关闭的一种特殊情况,但实际上并不是因为它只是被状态栏部分遮挡。不幸的是,事情并没有那么简单。还有其他边缘情况,中心坐标实际上可以稍微偏移。 (当我在出现键盘时更改地图视图的框架时,我注意到了这一点。)这是一个奇怪的小地图视图特性。

有人知道如何确定中心坐标有多“偏离”以便我可以调整吗?

是的,只需将centerCoordinate 转换为CGPoint 并与center 进行比较。唯一的技巧是确保您在相同的坐标系中执行这些操作(在下面的示例中,地图视图的坐标系):

func adjustOverlayCenterYConstraint() 
    let mapCenter = mapView.convert(mapView.centerCoordinate, toPointTo: mapView)
    let viewCenter = mapView.superview!.convert(mapView.center, to: mapView)

    overlayCenterYConstraint.constant = mapCenter.y - viewCenter.y

在这个例子中,我有一个centerY 约束,我正在调整它的constant,但它说明了如何以编程方式确定中心是否偏移以及如何调整它的想法。从理论上讲,您可能也需要调整 x 坐标,但想法是一样的。


你说:

仍然关闭(现在它位于真正中心的南部和西部)

如果它不在南部和西部,那么问题可能只是坐标系。请记住,centersuperview 的坐标系中,因此请确保转换为一致的坐标系(要么在地图视图的superview 的坐标系中获取coordinateCenter 并与center 进行比较,要么获取都在地图视图的坐标系中,如上所示)。

【讨论】:

这是一个绝妙的答案。非常感谢。

以上是关于MKMapView中心坐标不准确的主要内容,如果未能解决你的问题,请参考以下文章

iOS MKMapView setCenterCoordinate 不遵守确切的坐标

MKMapView 无法按位置设置中心

使用 MKMapView 的 showShowsUserLocation 方法而不显示视图

MKMapView 不读取给定坐标

MKMapView setRegion 到 Annotation

userLocation 上的中心 MKMapView(最初) - 仅适用于 iPhone 4?