在 iOS MapKit 中,如何在地图旋转时为注释设置动画?

Posted

技术标签:

【中文标题】在 iOS MapKit 中,如何在地图旋转时为注释设置动画?【英文标题】:In iOS MapKit, how do you animate an annotation as the map is rotating? 【发布时间】:2017-11-08 22:15:09 【问题描述】:

所以我可以创建贴在地图上的注释,我可以创建叠加层,比如多边形或多段线,并使用默认渲染器将它们绘制在地图上。一切正常。

我什至可以创建一个带有自定义图像的注释视图,该图像是按方向绘制的。问题是,当地图旋转时我无法收到通知,但只有当它完成旋转时,我想在地图旋转时更改我的注释视图(因为我的注释涉及方向)。

所以我想,嘿,随着地图的旋转,多边形和线条会重新定向,所以我将我的注释更改为叠加。问题是,我无法让我的自定义渲染器绘制任何东西。

为了测试,我创建了MKPolylineRenderer 的子类并覆盖了draw 方法。并查看线的坐标:

self.polyline.points()[0]

我猜它看起来不错,例如,

MKMapPoint(x: 263670550.06153709, y: 169200197.90301803)

但每次我尝试将该地图点转换为 CGPoint 时,y 坐标始终为 0,x 坐标似乎太大了:

let point = self.point(for: self.polyline.points()[0])
-> (52506.4039975107, 0.0)

如果我调用我的超类的 draw 方法,我可以看到我的折线,并且第一点肯定不在 y=0 处,但我无法在我的覆盖方法中显示任何内容(再次,似乎是因为注册问题,但不确定)。我听从了这个建议:

Custom MKOverlayRenderer drawMapRect function not drawing polygons

有什么想法吗?

【问题讨论】:

【参考方案1】:

在 MKMapViewDelegate 方法中,您有一个可以帮助您的函数。在我的应用中,我是这样管理的。

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer 
    let overlayRenderer = MKCircleRenderer(circle: overlay as! MKCircle)
    overlayRenderer.fillColor = UIColor.green
    overlayRenderer.alpha = 0.2
    return overlayRenderer

在用于定位我的用户的函数中:

//Overlays
let circleDraw = MKCircle(center: coordinates, radius: 
UI_mapView.add(circleDraw)

希望对您有所帮助。

【讨论】:

谢谢,正如我所说的渲染器已经在渲染折线,我无法让它渲染任何自定义。我可以看到它实际上是在调用我的自定义渲染器方法,然后我调用了 super 方法,但实际上我绘制的内容并没有显示出来。干杯。 哦,我想我回复得太快了!很抱歉;)

以上是关于在 iOS MapKit 中,如何在地图旋转时为注释设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

ios:mapkit如何在地图上启用当前位置按钮?

使用 MapKit 在 IOS 地图上放置图钉? [关闭]

iOS MapKit,细节较少

IOS/MapKit:通过单击 MKPlacemark 启动本机地图应用程序

iOS核心笔记—MapKit框架-基础

为什么默认的mapkit注释不会在iOS模拟器中的地图上不呈现