在 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 中,如何在地图旋转时为注释设置动画?的主要内容,如果未能解决你的问题,请参考以下文章