Ios 正确调整MapKit地图注释接点的大小

Ios 正确调整MapKit地图注释接点的大小,ios,swift,mapkit,mkannotation,mkannotationview,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)

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

我想实现的是,当其中一个引脚被轻敲时,引脚会放大

我有以下代码片段

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)
        }
    }
}
虽然这确实会调整图像的大小,但图像会扭曲,而且插针的位置也会移动(因此插针的实际位置不是正确的位置),我可以理解为什么会发生这种情况,但我不理解的是如何避免这种情况


是否有建议的调整贴图管脚大小的方法

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

  • “虽然这会调整图像大小,但图像会失真”
  • 发生这种情况的原因是将注释视图的大小调整为管脚图像的两倍。这意味着pin图像将被放大,因此看起来失真

    您可以做的是: a) (更快的解决方案)最初使销变小。例如,将它们设置为常规大小的0.7倍,当需要放大它们时,只需设置动画,将它们调整为正常大小即可。 b) (正确的解决方案)为这些别针使用不同的图像,其高度和宽度是目前为止的两倍。这样,您仍然可以拥有与现在相同大小的管脚,尽管您仍然需要执行我在第a点中描述的操作(最初可能尝试使用0.5的刻度?)。如果到目前为止您使用的是
    MKPinAnnotationView
    ,则必须使用自定义图像切换到自定义
    MKAnnotationView

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

  • “销的位置移动(因此销的实际位置不是正确的位置)”
  • 这完全是由于不正确的
    中心偏移量
    造成的
    centerOffset
    是从注释视图(以及图像,如果它占据整个注释视图而没有任何边距)的中心到图像上应“固定”到地图的点的偏移。该“固定”点将被放置在地图上该固定点应指向的位置的正上方,并在放大或缩小时保持在该点上方。
    当您放大注释视图时,中心偏移量将发生变化-例如,如果注释视图变大两倍,则
    中心偏移量也将加倍,等等。

    谢谢John,我将进一步研究。正如你所说的,我可能需要做的是,创建一个自定义图像,然后当点击pin时,展开图像,还包括一个offsethanks作为提示,它们帮助很大