我正在尝试对 MKTileOverlay 进行子类化,但是在找不到对象上的属性 canReplaceMap 时遇到问题。我究竟做错了什么?我去新建,创建新类,MKTileOverlay 的子类并添加教程都说要添加的方法,但是找不到这些简单的属性!
问问题
185 次
1 回答
1
这是我一直用来在 MapKit 中覆盖地图的 MKTileOverlay 的自定义类扩展:
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
于 2016-11-02T23:42:04.200 回答