swift - 使用 Swift 在 MapView 上绘制多边形

标签 swift mapkit mkpolygon mkpolygonrenderer

我有一个MKMapView,还有一组坐标,我想用多边形连接起来绘制一个矩形。下面是我开始使用的代码。

import UIKit
import MapKit

class mapViewViewController: UIViewController {
    @IBOutlet var map: MKMapView!


    override func viewDidLoad() {
        super.viewDidLoad()
        map?.delegate=self


        let startingPoint1 = ...

        let startingPoint2 = ...


        let endingPoint1 = ...

        let endingPoint2 = ...

        var coordinateInput:[CLLocationCoordinate2D]=[startingPoint1,startingPoint2,endingPoint1,endingPoint2]


        let line = MKPolygon(coordinates:&coordinateInput, count:4)

        map.addOverlay(line)


    }


extension mapViewViewController: MKMapViewDelegate{

    func map(_ map: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer{

        if overlay is MKPolygon{

            let renderer = MKPolygonRenderer(polygon: overlay as! MKPolygon)
            renderer.fillColor=UIColor.red.withAlphaComponent(0.5)
            renderer.strokeColor=UIColor.orange
            renderer.lineWidth=4
            return renderer
        }

        return MKOverlayRenderer()
    }

}

我遇到的问题是,当我启动 map View 时, map 顶部没有按预期显示任何内容。我已经确认我所有的坐标都是有效的,并且是我想要的,但是我当前的设置并没有像我期望的那样在 map 上绘制。实现此目标的正确方法是什么?

最佳答案

您对 rendererFor 的签名是不正确的。在您的方法中添加一个断点或日志语句,您将看到它没有被调用。

正确的签名是:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { ... }

关于swift - 使用 Swift 在 MapView 上绘制多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58294236/

相关文章:

swift 3 : UITabBarController error: '*** -[__NSArray0 objectAtIndex:]: index 1 beyond bounds for empty NSArray'

ios - 在 setVisibleMapRect 上保留 map View 相机间距(3d 角度)

ios - 像 Google Maps Directions 一样绘制 MKMapView Overlay

ios - 在 MKMapView 中创建覆盖当前区域的方形叠加层

ios - componentsseparatedbystring 在 Swift 中由多个分隔符

ios - 在 Swift 中过滤自定义对象数组

ios - UINavigationController - 使用 UIBlurEffect 清除背景

iPhone 开发 - CLLocationManager 与 MapKit

swift - 如何为 MKPolyline 和 MKPolygon 添加描述?