1

我使用以下代码在 iPad 上进行了测试。

如果我像下面的代码一样添加 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
4

1 回答 1

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
}
*/

如果这仍然是一个问题,你应该看看这个 SO question,关于drawRect's performance: to drawRect or not to drawRect (什么时候应该使用 drawRect/Core Graphics vs subviews/images,为什么?)

于 2014-01-14T17:37:45.660 回答