如何根据新坐标重新渲染MKMapView以更新叠加层

时间:2018-01-06 10:12:08

标签: swift mapkit cllocation

我已经编写了这个函数来在加载视图中添加叠加层,并且它可以很好地工作。

如何根据我点击按钮时传递的新坐标,使用此功能或任何其他方法更新叠加。

我正在传递一个类型CLLocationCoordinate2D坐标的数组。

 func drawpolyline(loclist: Array<CLLocationCoordinate2D>) {
   //  if let overlays = self.mainMapView?.overlays {
   //      self.mainMapView.removeOverlays(overlays)
   //  }

   if (loclist != nil && loclist.count > 1) {
        let startmark = loclist.first
        let cord1 = CLLocationCoordinate2D(latitude: (startmark?.latitude)!, longitude: (startmark?.longitude)!)

        let polyline = MKPolyline(coordinates: loclist, count: loclist.count)
        print(polyline.pointCount)
        let latDelta:CLLocationDegrees = 0.02
        let lonDelta:CLLocationDegrees = 0.02

        let mapSpan = MKCoordinateSpanMake(latDelta, lonDelta)
        let mapRegion = MKCoordinateRegion(center: cord1, span: mapSpan)
        // let adjustedRegion: MKCoordinateRegion = [self.mainMapView regionThatFits:viewRegion]

        if (mainMapView != nil) {
          self.mainMapView.delegate = self
          self.mainMapView.add(polyline)
          self.mainMapView.setRegion(mapRegion, animated: true);
          // self.mainMapView.addAnnotation(mapAnnotation);
        }
    } else {
        configureMap()
    }
}


//function of MKMapViewDelegate for making overlays
//Function to give polyline color and width etc.
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    //Return an `MKPolylineRenderer` for the `MKPolyline` in the `MKMapViewDelegate`s method
     if let polyline = overlay as? MKPolyline {
        let testlineRenderer = MKPolylineRenderer(polyline: polyline)
        testlineRenderer.strokeColor = .blue
        testlineRenderer.lineWidth = 3.0
        return testlineRenderer
    }

    fatalError("Something wrong...")
    return MKOverlayRenderer()
}

1 个答案:

答案 0 :(得分:0)

我假设你有一个按钮设置,并与IBAction链接。 您需要从按钮操作中调用drawpolyline函数,以新的坐标格式与之前在启动时调用它时的格式相同,但是对于新位置。

如果您不理解,可能会提供一些有关如何在启动时调用drawpolyline函数的更多信息,我假设在viewDidLoad

如果您不知道如何拨打按钮

@IBAction func showListPressed(_ sender: UIButton) {

    // call drawpolyline function here with new coordinates
}