加快OverlayView的绘制速度

时间:2012-05-01 09:47:30

标签: objective-c ios5 core-graphics mapkit overlay

我在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。

1 个答案:

答案 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/