【问题标题】:Correctly resize MapKit map annotation pin正确调整 MapKit 地图注释引脚的大小
【发布时间】:2017-03-22 20:12:41
【问题描述】:

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

我想要实现的是,当其中一个引脚被点击时,引脚会变大。

我有以下代码sn-p

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)
        }
    }
}

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

有没有推荐的调整地图图钉大小的方法?

【问题讨论】:

    标签: ios swift mapkit mkannotation mkannotationview


    【解决方案1】:

    这里有两个问题。虽然您说您确实了解它们发生的原因,但我会解释它们以确保我们在同一页面上并从它们转向可能的解决方案。

    1. "While this does resize the image, the image becomes distorted"

    发生这种情况的原因是您将注释视图的大小调整为图钉图像大小的两倍。这意味着 pin 图像将被放大,因此看起来会失真。

    你可以做的是: 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)"

    这纯粹是由于不正确的centerOffsetcenterOffset 是从注释视图的中心(以及您的图像,如果它占据整个注释视图而没有任何边距)到图像上应该“固定”到地图上的点的偏移量。该“固定”点将放置在地图上该图钉应该指向的位置的正上方,并且在您放大或缩小时将保持在该点上方。 当您放大注释视图时,中心偏移量会发生变化 - 例如,如果注释视图变成两倍大,那么 centerOffset 也会增加一倍,等等。

    【讨论】:

    • 谢谢约翰,我会进一步调查。正如你所说,我可能需要做的是,创建一个自定义图像,然后在单击图钉时,展开图像并包括一个偏移量
    • 感谢您的提示,他们帮助很大
    猜你喜欢
    • 2012-12-20
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多