在没有Callout的情况下转换MKAnnotationView

时间:2017-02-08 15:14:42

标签: ios swift mapkit mkannotation mkannotationview

我尝试在上面放大MKAnnotation的视图  func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) 正如你在动画中看到的那样,问题在于不仅是MKAnnotation的Pin部分,而且Callout是缩放的 - 任何人都知道如何解决这个问题?

Screenshot

我使用以下代码进行缩放动画(它是UIView的扩展)

func scaleUp(duration: TimeInterval = 0.2) {
    self.transform = CGAffineTransform.identity
    UIView.animate(withDuration: duration, delay: 0.0, options: [.curveLinear], animations: { () -> Void in
        self.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
    }) { (animationCompleted: Bool) -> Void in }
}

1 个答案:

答案 0 :(得分:1)

这是因为标注视图是MKAnnotationView的子视图。不幸的是,您无法访问标注视图,因此无法应对这种转换-可以在层次结构中找到标注视图,但它无法按需工作。

但是您可以从相反的方向进行操作:

  • 以较低的比例开始 (这将作为默认尺寸),假设0.5,然后将其放大至{{1 }} (目前,您已选择具有标准尺寸标注视图的图钉)

  • 您需要做的是为默认值选择适当大小的图像(在这种情况下,默认图像大小必须更大)

如果您正在使用群集:

MapKit框架在内部更改转换矩阵以用于翻译目的(引脚正从群集移入/移出群集)。这有一个副作用,它将转换矩阵中的1.0a更改为d,这意味着它将重置您先前设置的比例。要解决此问题,请像这样在注释视图中覆盖转换:

1.0