簡體   English   中英

在MKMapView上調用addOverlay時,從未調用mapView:rendererForOverlay委托方法

[英]mapView:rendererForOverlay delegate method never called when addOverlay is called on MKMapView

我創建了一個MapViewController類,其中的場景在情節MKMapView中具有MKMapView MKMapView有一個到MapViewController的出口mapView ,並且在情節MapViewController中將該委托設置為MapViewController MapViewController是一個MKMapViewDelegate ,我實現了可選的委托方法mapView:rendererForOverlay以及其他一些方法。

viewDidAppear ,我稱為addMapOverlay ,定義為:

  func addMapOverlay() {
    let overlayRect = MKMapRectMake(
      44.97077, -93.2864435,
      0.1, 0.1)

    let coordinate = CLLocationCoordinate2DMake(44.97087, -93.2865435)

    let overlay = MapOverlay(coordinate: coordinate, rect: overlayRect)

    print("adding overlay with level...")
    mapView.delegate = self;
    mapView.addOverlay(overlay, level: .AboveRoads)
  }

即使該委托人已設置在情節提要中,我仍嘗試查看是否也可以在這里進行設置。 (沒有不同。)

我這樣實現委托方法:

extension MapViewController: MKMapViewDelegate {

  func mapViewWillStartRenderingMap(mapView: MKMapView) {
    print("mapViewWillStartRenderingMap...")
  }

  func mapView(mapView: MKMapView, didAddOverlayViews overlayViews: [AnyObject]) {
    print("mapView:didAddOverlayViews...")
  }

  func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay)
    -> MKOverlayRenderer {
      print("mapView:rendererForOverlay")

      if overlay is MapOverlay {
        let image = UIImage(named: "main_map_overlay")
        let overlayView = MapOverlayView(overlay: overlay, overlayImage: image!)

        return overlayView
      }

      return MKPolylineRenderer()
  }

}

我應該在mapView中看到帶有坐標的UIImage,但是我沒有。 問題是mapView:rendererForOverlay永遠不會被調用。 缺少什么? 我唯一的輸出是:

adding overlay with level...
mapViewWillStartRenderingMap...

好吧,我想出了解決我問題的答案。 事實證明,在這種情況下, CLLocationCoordinate2DMake(44.97087, -93.2865435)不是制作坐標的正確方法。 一種或另一種方式是錯誤的,因此,在沒有任何有用信息的情況下,靜默添加覆蓋失敗。 我做了以下事情,現在很好:

let parkTopLeft = MKMapPointForCoordinate(CLLocationCoordinate2D(
  latitude: 44.972189,
  longitude: -93.287307))
let parkBottomRight = MKMapPointForCoordinate(CLLocationCoordinate2D(
  latitude: 44.967810,
  longitude: -93.28186))

let overlayRect = MKMapRectMake(
  parkTopLeft.x,
  parkTopLeft.y,
  parkBottomRight.x - parkTopLeft.x,
  parkBottomRight.y - parkTopLeft.y)

let coordinate = CLLocationCoordinate2DMake(
  overlayRect.origin.x + overlayRect.size.width / 2,
  overlayRect.origin.y + overlayRect.size.height / 2)

let overlay = MapOverlay(coordinate: coordinate, rect: overlayRect)

mapView.addOverlay(overlay, level: .AboveRoads)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM