Проблема производительности MKOverlayView.Ничего не делать.Но медленно - PullRequest
1 голос
/ 05 марта 2012

Я тестировал на iPad с кодом ниже.

Если я добавлю MyOverlay, как показано ниже, загрузка фрагментов карты по умолчанию в MKMapView замедлится, даже если ничего не делать в drawMapRect.

И если я удалю MyOverlay из MKMapView, загрузка листов карты по умолчанию снова станет быстрой.

Интересно, что делается в фоновом режиме, когда вызывается 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

1 Ответ

0 голосов
/ 14 января 2014

Название метода рисования 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 о производительности drawRect: рисовать или не рисовать (когда следует использовать drawRect / Core Graphics против подпредставлений / изображений) а почему?)

...