我试图在我的地图视图中添加一个自定义覆盖来创建一个倒圆(而不是典型的MKCircle覆盖在地图上的一个大头针周围)。我试过遵循这条线索:Add inverted circle overlay to map view
我没有创建一个自定义MKOverlay子类,但是我创建了一个自定义mkoverlayrender子类,我试图将其与MKCircle一起用作MKOverlay。

class MKInvertedCircleRenderer: MKOverlayRenderer {
var fillColor: UIColor = UIColor.blue

override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) {
    let path = UIBezierPath(rect: CGRect(x: mapRect.origin.x, y: mapRect.origin.y, width: mapRect.size.width, height: mapRect.size.height))

    context.setFillColor(fillColor.cgColor)
    context.addPath(path.cgPath)
    context.fillPath()
}}

这是我的视图控制器中的mapView委托调用:
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    switch(overlaySegmentedControl.selectedSegmentIndex) {
    case 0: // Draw circle on map view for region specified for "When I Arrive".
        let circleRenderer = MKCircleRenderer(overlay: overlay)
        circleRenderer.strokeColor = self.view.tintColor
        circleRenderer.lineWidth = 3.0
        circleRenderer.fillColor = self.view.tintColor.withAlphaComponent(0.15)

        return circleRenderer

    case 1: // Draw rectangle with circle cutout on map view for region specified for "When I Leave".
        let circleRenderer = MKInvertedCircleRenderer(overlay: overlay)

        return circleRenderer

    default:
        fatalError("Unspecified segmented control selected: \(overlaySegmentedControl.selectedSegmentIndex)")
    }
}

目前,案例0的工作原理与预期一致,它在地图视图上围绕一个管脚输出一个圆形覆盖。
案例1不起作用,我希望它在地图上画一个矩形,填充mkoverlyrenderer子类中的fillColor集-但是没有显示任何内容。我正在尝试排除这个问题,然后在中间添加一个路径来切出一个圆圈。
任何帮助都将不胜感激!

最佳答案

原来不能将MKCircle与自定义mkoverlayrender子类一起使用。
必须创建自己的自定义MKOverlay子类才能使用自定义mkoverlayrender子类。

关于swift - 倒圆叠加在 map View 上(MapKit,MKOverlay,Swift),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48605096/

10-10 21:11