Подкласс MKOVerlay View-canDrawMapRect не вызывается

Я пытаюсь создать подкласс MKOverlayView для создания пользовательского наложения. Я понимаю, что для этого необходимо переопределить следующие два метода

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context;

- (BOOL)canDrawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale;

Мой вопрос вытекает из последнего метода. По какой-то причине, когда я переопределяю его в своем подклассе MKOverlayView, он не вызывается. Согласно документации, он должен вызываться перед рендерингом тайлов, и если он возвращает YES, то вызывается drawMapRect. Я надеялся, что кто-нибудь сможет взглянуть на следующий код и посмотреть, смогут ли они понять, почему этот метод не вызывается. Это должно быть где-то включено/вызвано вручную?

Интересно, что метод drawMapRect вызывается, а не метод canDrawMapRect. Я неправильно истолковываю функциональность canDrawMapRect или что-то не так в моем коде?

HeatMapOverlay.h

#import <MapKit/MapKit.h>
#import <Foundation/Foundation.h>
@interface HeatMapOverlayView : MKOverlayView{
    ...variables...
}

@end

HeatMapOverlay.m

#import "HeatMapOverlayView.h"
#import <CoreGraphics/CoreGraphics.h>
#import <QuartzCore/QuartzCore.h>

@implementation HeatMapOverlayView
@synthesize points, heat, QualityIndex;
- (id)initWithOverlay:(id<MKOverlay>)overlay {
    self = [super init];
    if (self) {
        // Initialization code here.
    }
    return self;
}


- (BOOL)canDrawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale{
         ...complete check...
return NO;
}


- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext (CGContextRef)context{
...draw overlay...
}

Спасибо!


person Matt York    schedule 05.08.2011    source источник


Ответы (1)


Попробуйте изменить эту строку:

self = [super init];

к этому, чтобы использовать правильный инициализатор для MKOverlayView:

self = [super initWithOverlay:overlay];
person Community    schedule 06.08.2011
comment
Теперь функция canDrawMapRect ведет себя так, как ожидалось. Спасибо! - person Matt York; 08.08.2011