我使用MKPolyline
在CLLocation
中的2 MKMapView
个点之间画一条线。
我希望线条绘制动画 - "积累" - 从A点到B点(类似于用户从A到B的步行方式)。目前该系列只是即刻展示。
我希望从A点到B点的线不会立即出现,而是从A点到B点用动画构建"填满"。
我目前的研究让我了解了这个功能:
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if overlay is MKPolyline {
let polylineRenderer = MyRenderer(overlay: overlay)
polylineRenderer.strokeColor = UIColor.green
polylineRenderer.lineWidth = 1
// HERE
return polylineRenderer
} else {
return MKOverlayRenderer()
}
}
我相信通过MKOverlayRenderer
获得所需动画的方法。
我目前的基本子类:
class MyRenderer: MKPolylineRenderer {
override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) {
context.saveGState()
context.setBlendMode(CGBlendMode.exclusion)
context.setFillColor(UIColor.clear.cgColor)
context.setStrokeColor(UIColor.green.cgColor)
context.setLineWidth(10.0)
if self.polyline.pointCount > 1 {
context.beginPath()
let point_ = self.point(for: self.polyline.points()[0])
context.move(to: CGPoint(x: point_.x, y: point_.y))
for element in 1 ..< self.polyline.pointCount {
let point_ = self.point(for: polyline.points()[element])
context.addLine(to: CGPoint(x: point_.x, y: point_.y))
}
context.closePath()
context.drawPath(using: .fillStroke)
}
context.restoreGState()
}
}
这些线从点到点绘制为CGContext
。我试图添加一个子图层来为这个设置动画并将线条本身设置为清晰的颜色,但我还没有能够找到一个视图元素来添加子图层。
我错过了什么或者最好的方法是什么?&#34; draw&#34;从CLLocation
点到CLLocation
之间的一行UIView.animate
(f.e.),时间为0.3秒。
非常感谢帮助。