MKTileOverlay子类化的困难



我正在尝试子类MKTileOverlay,但我有问题,它没有找到对象上的canReplaceMap属性。我做错了什么?我去新建,创建新的类,MKTileOverlay的子类,并在教程中添加方法,但是这些简单的属性没有找到!

这是MKTileOverlay的自定义类扩展,我一直在MapKit中使用它来覆盖地图:

class CustomTileOverlay : MKTileOverlay
{
    var mapLocation: MKMapPoint
    var mapSize: MKMapSize
    init(urlTemplate: String, location: MKMapPoint, size: MKMapSize)
    {
        mapLocation = location
        mapSize = size
        super.init(urlTemplate: urlTemplate)
    }
    override var boundingMapRect: MKMapRect {
        get {
            return MKMapRect(origin: mapLocation, size: mapSize)
        }
    }
}

做扩展的原因是能够调整boundingMapRect,因为它只在基类中读取(所以如果你不需要调整它,不要子类MKTileOverlay)。

下面是使用自定义类的设置。我正在从CoreData记录中提取值,我设置了瓷砖集,但你可以硬连线那些或从适合你的应用程序的任何地方获得它们。因为我有折线覆盖瓷砖,我需要最后一行来确保瓷砖在线条之下,所以如果你没有两者,你就不需要那行。
    [Declaration...]
    private var tileLayer: CustomTileOverlay?
    [Later in the code...]
    let rectangle = overlayMap.getMapRectangle()  // Why I need to sub-class
    let mapURL = "file://" + overlayMap.getMapPath() + "/{z}/{x}/{y}.png"
    tileLayer = CustomTileOverlay(urlTemplate: mapURL, location: rectangle.origin, size: rectangle.size)
    tileLayer?.minimumZ = overlayMap.getMinimumZoom()
    tileLayer?.maximumZ = overlayMap.getMaximumZoom()
    tileLayer?.canReplaceMapContent = true
    tileLayer?.tileSize = overlayMap.getTileSize()
    self.mapView.add(tileLayer!)
    self.mapView.insert(tileLayer!, at: 0)  // Set to lowest z-level to ensure polylines are above map tiles

最新更新