正确调整MapKit地图注释引脚的大小

时间:2017-03-22 20:12:41

标签: ios swift mapkit mkannotation mkannotationview

我有一张添加了几个注释引脚的地图。

我想要实现的是,当其中一个引脚被分接时,引脚会扩大。

我有以下代码段

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView){
    if(view.image != nil){
        UIView.animate(withDuration: 0.1) {
            view.centerOffset = CGPoint(x: 10, y: -20)
            view.frame.size = CGSize(width: (view.image?.size.width)! * 2, height: (view.image?.size.height)! * 2);
            view.frame.offsetBy(dx: (view.image?.size.width)! * 2, dy: (view.image?.size.height)! * 2)
        }
    }
}

虽然这会调整图像大小,但图像会变形并且引脚的位置也会移动(因此引脚放置的实际位置,不是正确的位置),我可以理解为什么会发生这种情况,但是我不明白如何解决这个问题。

是否有推荐的调整地图引脚大小的方法?

1 个答案:

答案 0 :(得分:3)

这里有两个问题。虽然你说你明白为什么会发生这种情况,但我会解释它们以确保我们在同一页面上并从它们转移到可能的解决方案。

  1. "While this does resize the image, the image becomes distorted"
  2. 发生这种情况的原因是您将注释视图的大小调整为引脚图像大小的两倍。这意味着引脚图像将被放大,因此看起来很扭曲。

    你能做的是: a)(更快的解决方案)最初使引脚变小。例如,将它们设置为常规尺寸的0.7倍,当您需要放大它们时,只需将它们的大小调整为正常尺寸即可。 b)(适当的解决方案)对这些引脚使用不同的图像,其高度和宽度是目前为止的两倍。这样你仍然可以使用与现在相同的尺寸,尽管你仍然必须按照我在a)中描述的那样做(也许最初尝试使用0.5刻度?)。如果您到目前为止使用MKPinAnnotationView,则必须使用自定义图片切换到自定义MKAnnotationView

    通过这种方式,您将获得最初缩小尺寸的图像,然后在放大时以全分辨率显示。可能存在一些图像失真,但与放大图像时可见的失真相比几乎看不到。

    1. "the position of the pin moves (so the actual location the pin is placed at, is not the correct location)"
    2. 这纯粹是由于centerOffset不正确。 centerOffset是注释视图中心的偏移(以及您的图像,如果它占用整个注释视图而没有任何边距)到图像上应该“固定”到地图上的点。那个“固定”点将被放置在地图上的引脚应该指向的地方的正上方,当你放大或缩小时它将保持在该点之上。 放大注释视图时,中心偏移将发生变化 - 例如,如果注释视图变为两倍,那么centerOffset也会加倍等。