如何在MKMapView中为CGContext的线条图绘制动画

时间:2017-05-29 15:45:36

标签: swift mkmapview mapkit

我使用MKPolylineCLLocation中的2 MKMapView个点之间画一条线。

我希望线条绘制动画 - "积累" - 从A点到B点(类似于用户从A到B的步行方式)。目前该系列只是即刻展示。

enter image description here

我希望从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秒。

非常感谢帮助。

0 个答案:

没有答案