現在、カスタム タイル オーバーレイを使用して MKMapView を実装しています。残念ながら、私が持っているタイルは Retina ディスプレイではかなり小さく表示され、テキストが読みにくくなっています。地図上の位置をいじらずに拡大する方法はありますか?
次のようなカスタム 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 を操作した経験があったとしても、多くの成功を収めずにいくつかのパラメーターで遊んだだけであるとは言えません。