【问题标题】:Transform MKAnnotationView without Callout在没有标注的情况下转换 MKAnnotationView
【发布时间】:2017-02-08 15:14:42
【问题描述】:

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

我使用以下代码进行缩放动画(它是 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 }
}

【问题讨论】:

  • 不是通过变换来缩放视图,而是增加注释的图像的大小?
  • 这是 UIView 的扩展 - 我已经更新了问题
  • @matt 感谢您的想法。似乎 MKAnnotationView 不使用 UIImageView 来显示图像,所以我无法访问 .transform
  • 不,但它确实有一个image。关于 UIImageView 我什么都没说,我特别建议反对使用变换。
  • 还有一个想法:对于现有的注释,将另一个注释替换为您已用transform 缩放缩小 到与第一个相同大小的另一个注释,并将其up 放大到 100%。现在标注将是正常的。

标签: ios swift mapkit mkannotation mkannotationview


【解决方案1】:

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

但你可以从相反的方向接近它:

  • 从较小的比例开始 (这将作为默认尺寸),比如说0.5,然后放大到1.0 (此时您已选择具有标准尺寸标注视图的图钉)

  • 您只需要为默认值提供适当尺寸的图像(在这种情况下,默认图像尺寸必须更大)

如果您使用集群:

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

override var transform: CGAffineTransform {
    get {
        return super.transform
    }
    set {
        super.transform = CGAffineTransform(
            a: isSelected ? 1.0 : 0.5,
            b: newValue.b,
            c: newValue.c,
            d: isSelected ? 1.0 : 0.5,
            tx: newValue.tx,
            ty: newValue.ty)
    }
}

【讨论】:

    猜你喜欢
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2013-02-19
    • 2017-05-27
    • 2018-08-15
    • 2021-10-24
    相关资源
    最近更新 更多