Я пытаюсь создать подкласс 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...
}
Спасибо!