[英]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.