0

我想知道是否有一些可用的动画可用于更改MapPolyline和动态MapPolygon"。

现在,我可以绘制它们并通过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

如果可以在此更改中添加一些动画,那就太好了 - 在我的情况下,用户“动态”更改多边形,并且没有动画它看起来有点难看。

4

1 回答 1

0

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

由于 HERE SDK 允许在下一个渲染帧上更新几何图形,这可用于通过使用显示链接设置稍微修改的多段线随着时间的推移动画。

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

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 ... 
}

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

于 2021-06-21T07:35:31.397 回答