绘图动画

Animation for drawings

我想知道是否有一些可用的动画可以动态更改 MapPolylineMapPolygon

现在,我可以绘制它们并通过 geometry 属性 编辑它们,但没有任何动画:

let geoPolyline = try! GeoPolyline(vertices: option3Geo)
let lineColor = UIColor(red: 0, green: 0.56, blue: 0.54, alpha: 0.63)
mapPolyline = MapPolyline(geometry: geoPolyline,
                                        widthInPixels: 30,
                                        color: lineColor)
mapView.mapScene.addMapPolyline(mapPolyline!)
// and later to update without any animations    
mapPolyline?.geometry = newPoints

多边形相同:

let geoPolygon = try! GeoPolygon(vertices: option3Geo)

let fillColor = UIColor(red: 0, green: 0.56, blue: 0.54, alpha: 0.63)
mapPolygon = MapPolygon(geometry: geoPolygon, color: fillColor)
        
mapView.mapScene.addMapPolygon(mapPolygon!)

// later
mapPolygon.geometry = geometry

如果可以将一些动画添加到此更改中,那就太好了 - 在我的例子中,用户“即时”更改多边形,如果没有动画,它看起来有点难看。

截至目前,对于 HERE SDK 4.7.5.0,此类动画不适用于 SDK 端的 MapPolyline <-> MapPolygon。添加动画可能是一个合理的请求,并且可能计划在未来发布,但在您的情况下,最好的解决方案是在应用程序级别应用动画。然后您可以完全控制您希望看到的行为。您可以将动画应用于 MapPolyline 以将它们拖动到屏幕上,或者在不同形状之间变形。这只需要一点数学知识。您还可以查找一些现有的动画库,例如 Spring.

由于 HERE SDK 允许在下一个渲染帧上更新几何图形,这可用于通过使用显示器 link.

设置随时间动画的略微修改的多段线

定义一个与显示渲染同步的循环:

private lazy var displayLink = CADisplayLink(target: self,
                                                 selector: #selector(animatorLoop))

开始渲染循环:

displayLink.isPaused = false
displayLink.add(to: .current, forMode: .common)

动画:

// Called periodically.
@objc private func animatorLoop() {
   // Change the geometry ... 
}

Gestures 示例应用程序中,实际上有一个 HERE SDK 示例利用它来随时间更改缩放级别。我在上面稍微修改了一下,以展示它通常是如何工作的。