我在MKMapView上通过子类化MKPolygonView绘制图像(2.5 MB,PNG图像数据,1240 x 1240,8位/彩色RGBA,非隔行扫描)并覆盖drawMapRect:zoomScale:inContext:-method as如下:
-(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。
答案 0 :(得分:1)
您可以使用平铺图像来提高性能。 Apple在WWDC 2010中使用了这种技术。您可以在此处看到示例:https://github.com/klokantech/Apple-WWDC10-TileMap。
此博客中也解释了该过程:http://shawnsbits.com/blog/2010/12/23/mapkit-overlays-session-1-overlay-map/