0

我通过子类化 MKPolygonView 并覆盖 drawMapRect:zoomScale:inContext:-方法在 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。

4

1 回答 1

1

您可以使用平铺图像来提高性能。Apple 在 WWDC 2010 中使用了这种技术。您可以在此处查看示例:https ://github.com/klokantech/Apple-WWDC10-TileMap 。

另外在这个博客中解释了这个过程:http ://shawnsbits.com/blog/2010/12/23/mapkit-overlays-session-1-overlay-map/

于 2012-05-01T10:24:36.860 回答