2012-03-05 17 views
1

我使用下面的代码在iPad上测试过。MKOverlayView性能问题。什么也不做。但是缓慢

如果我像下面的代码一样添加MyOverlay,那么即使在drawMapRect中什么都不做,默认地图图块的MKMapView加载速度会变慢。

如果我从MKMapView中删除MyOverlay,默认地图块的加载会再次变快。

我不知道在调用drawMapRect时后台做了什么。

或下面的代码有任何性能问题?

[代码]

@implementation MyOverlay 

-(id) init 
{ 
    self = [super init]; 

    boundingMapRect = MKMapRectWorld; 
    boundingMapRect.origin.x += 1048600.0; 
    boundingMapRect.origin.y += 1048600.0; 

    coordinate = CLLocationCoordinate2DMake(0, 0); 

    return self; 
} 

... 
@end 


@implementation MyOverlayView 

- (id) initWithOverlay:(id<MKOverlay>)overlay 
{ 
    self = [super initWithOverlay:overlay]; 

    ... 
    return self; 
} 

- (BOOL) canDrawMapRect:(MKMapRect) sm zoomScale:(MKZoomScale)zoomScale 
{ 
    return true; 
} 

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext: CGContextRef)context 
{ 
    return; // do nothing, but map loading become slower 'much'. 
} 
@end 

回答

0

的MKOverlayView的绘制方法drawMapRect:zoomScale:inContext:的名字让我想起了UIView的drawRect方法。而MKOverlayView是UIView的子类。的UIView的子类提供了这样的警告:

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
} 
*/ 

如果这仍然是一个关注,你应该看一看这太问题,约drawRect的表现:to drawRect or not to drawRect (when should one use drawRect/Core Graphics vs subviews/images and why?)