MKPolygonView をサブクラス化し、次のように drawMapRect:zoomScale:inContext:-method をオーバーライドすることにより、MKMapView にイメージ (2.5 MB、PNG イメージ データ、1240 x 1240、8 ビット/カラー RGBA、非インターレース) を描画しています。
-(void) drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {
CGRect theRect = [self rectForMapRect:overlayRect];
CGRect clipRect = [self rectForMapRect:mapRect];
CGContextClipToRect(context, clipRect);
CGContextDrawImage(context, theRect, imageReference);
}
overlayRect
マップ上の画像の位置とサイズをMKMapRect
定義します (ハード コードされ、 で初期化されますinitWithOverlay:
)
imageReference
。画像への参照を保持し、UIImage にロードされCGImage
、UIImage
インスタンスを呼び出すことによって取得されます (これも でinitWithOverlay:
) 。
私の MKMapView は、最初にマップに画像を描画するのに 8 ~ 14 秒かかり、ズームインしてタイルをより良い解像度で再描画するときもほぼ同じ時間かかります。それは本当に長いようで、MapKit を初めて使用するので、何か根本的に間違っているのではないかと思っています。