ios - Swift MKMapView 多边形叠加故障

标签 ios swift function mkmapview overlay

在极少数情况下,我的 map 上的叠加层(小蓝点)会出现奇怪的眩光(右侧的大蓝色区域)(如图所示)。有时放大或缩小会修复它,但并非总是如此。找不到任何关于为什么会发生这种情况的信息。这与它的呈现方式有关吗?

enter image description here

func drawLocations(_ loc: CLLocation)
    {
        let center = CLLocationCoordinate2D(latitude: loc.coordinate.latitude, longitude: loc.coordinate.longitude)
        let lat: CLLocationDegrees = center.latitude
        let long: CLLocationDegrees = center.longitude
        var points = [CLLocationCoordinate2DMake(lat,long),CLLocationCoordinate2DMake(lat,long),CLLocationCoordinate2DMake(lat,long),CLLocationCoordinate2DMake(lat,long)]
        let polygon = MKPolygon(coordinates: &points, count: points.count)
        DispatchQueue.main.async(execute: {
            self.mapView.add(polygon)
        })
    }
func mapView(_ mapView: MKMapView!, rendererFor overlay: MKOverlay!) -> MKOverlayRenderer!
    {
        if overlay is MKPolygon
        {
            let polygonView = MKPolygonRenderer(overlay: overlay)
            polygonView.lineWidth = 4
            polygonView.strokeColor = UIColor(red: 30/255.0, green: 12/255.0, blue: 242/255.0, alpha: 0.4)
            return polygonView
        }
        return nil
    }

最佳答案

看起来您正在使用 MKPolygon,即使您只绘制了一个具有相同纬度和经度的点。我认为对单个点使用 MKCircle 会更好。

func drawLocation(_ loc: CLLocation)
    {
        let center = CLLocationCoordinate2D(latitude: loc.coordinate.latitude, longitude: loc.coordinate.longitude)
        let circle = MKCircle(center: center, radius: 4)
        DispatchQueue.main.async(execute: {
            self.mapView.add(circle)
        })
    }
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer
    {
        if overlay is MKCircle
        {
            let circleView = MKCircleRenderer(circle: overlay)
            circleView.lineWidth = 4
            circleView.strokeColor = UIColor(red: 30/255.0, green: 12/255.0, blue: 242/255.0, alpha: 0.4)
            return circleView
        }
        return nil
    }

正如您所说,放大和缩小功能可能会导致此故障,因为放大时的点可能看起来更像多边形,而当您缩小时,渲染器仍然具有多边形人工制品,但现在只渲染一个单坐标。

通常最好使用多边形来渲染间隔较远的点,这有助于渲染器,因为 map 是在逐个图 block 的基础上渲染的,这样可以很容易地区分多边形中的点。对于非常靠近的多个点,我们可以考虑将它们分组以使用更大的半径 MKCircle。您还可以考虑将 MKMapViewisZoomEnabled 设置为 false,并在所需的缩放级别设置固定的 MKCoordinateRegion避免这些渲染伪像。

关于ios - Swift MKMapView 多边形叠加故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40873179/

相关文章:

ios - 使用 Facebook SDK 3.0(测试版)、Xcode 4.3.2 在我自己的 Facebook 墙上发布图像

ios - 我可以通过 UISearchController 以编程方式复制 UIStatusBar 上的点击吗?

ios - Windows下制作CSR证书(7)

ios - 在 UILabel 上展开可选值时意外发现 nil

c++ - 动态/在执行期间重新定义或添加类成员函数

python - 迭代变量参数的元素

ios - UITableview 问题的动态高度

ios - 尝试加载 View 时不允许取消分配

swift - 准备(对于 : sender:) not getting called during segue from button to tab bar controller (in Swift 4, Xcode 9)

php - 捕获所有 MySQL 错误的函数?