放置在叠加层上时,MapKit引脚标题不可见?

时间:2018-01-21 16:28:30

标签: ios swift mapkit

当我将一个引脚放在叠加层顶部时,引脚的标题似乎被遮挡了。当引脚放置在不在覆盖层顶部的点上时,标题将显示在引脚下方。

字符串lastCoordName是引脚的标题;此字符串从前一个视图控制器传递到当前视图控制器(如下所示)。

以下是一些描述我正在谈论的内容的图片......

title shown 当引脚脱离覆盖层时,上图显示引脚正下方的标题(“360”)。

title not shown 但是当引脚移动到覆盖层顶部的正确位置时,标题会消失。

当水平绘制折线并终止覆盖时,仍会显示标题,因此问题不在于线条覆盖标题。

这是自定义引脚类:

class CustomPin : NSObject, MKAnnotation {
    var coordinate: CLLocationCoordinate2D
    var title: String?

    init(coordinate: CLLocationCoordinate2D, title: String) {
        self.coordinate = coordinate
        self.title = title

        super.init()
    }
}

viewDidLoad()的相关部分

    let pin = CustomPin(coordinate: endPoint, title: lastCoordName)//uses lastCoordName from previous vc (insead of looking up name of last node given coord)
    mapView.addAnnotation(pin)
    mapView.selectAnnotation(pin, animated: true)

和mapViewController扩展

extension mapViewController: MKMapViewDelegate {

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        if overlay is SchoolMapOverlay {
            return SchoolMapOverlayView(overlay: overlay, overlayImage: #imageLiteral(resourceName: "GBSF1"))
        } else if overlay is MKPolyline {
            let lineView = MKPolylineRenderer(overlay: overlay)
            lineView.strokeColor = UIColor(red:0.2, green:0.48, blue:1.00, alpha:1.0)
            lineView.lineWidth = 10.0
            return lineView
        }
        return MKOverlayRenderer()
    }

    func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
        let pin = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "pin")
        pin.canShowCallout = true

        return pin
    }
}

叠加层是否覆盖了针脚标题?如果是这样,为什么引脚及其标题不在同一级别(叠加层上方)?

1 个答案:

答案 0 :(得分:0)

您可以使用
设置用于绘制叠加层的图层 mapView.add(tileOverlay, level: .aboveRoads)

这会将其绘制在道路上方但在标签下方。问题是,它低于所有标签;因此,根据您在地图中显示的内容,您必须稍微使用标签。

MKOverlayLevel Documentation