我目前正在实现一个带有自定义平铺覆盖的 MKMapView。不幸的是,我拥有的瓷砖在视网膜显示器上显示得相当小,使得它们上的文字很难阅读。有没有办法在不弄乱他们在地图上的位置的情况下放大它们?
我已经使用这样的自定义 MKTileOverlayRenderer 子类尝试了这个问题中的解决方案:
class CNTileOverlayRenderer: MKTileOverlayRenderer {
override func drawMapRect(mapRect: MKMapRect, zoomScale: MKZoomScale, inContext context: CGContext) {
guard UIScreen.mainScreen().scale > 1.0 else {
super.drawMapRect(mapRect, zoomScale: zoomScale, inContext: context)
return
}
let tileSize = (self.overlay as! MKTileOverlay).tileSize
let rect = self.rectForMapRect(mapRect)
CGContextSaveGState(context)
let t = CGContextGetCTM(context)
CGContextConcatCTM(context, CGAffineTransformInvert(t))
let ratio = tileSize.width / (rect.size.width * 2)
CGContextTranslateCTM(context, (-rect.origin.x) * ratio, tileSize.height + (ratio * rect.origin.y))
CGContextScaleCTM(context, ratio, -ratio)
super.drawMapRect(mapRect, zoomScale: zoomScale, inContext: context)
CGContextRestoreGState(context)
}
}
不幸的是,这似乎把我的瓷砖弄乱了。我不能说我有很多使用 CGContexts 的经验,并且只使用了一些参数而没有取得太大的成功。