2011-08-05 2 views
1

Je tente de sous-classer MKOverlayView pour créer une superposition personnalisée. Je comprends que pour ce faire, il faut passer outre les deux méthodes suivantesSous-classement MKOVerlay View- canDrawMapRect non appelé

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

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

Ma question arrises de la dernière méthode. Pour une raison quelconque, lorsque je l'écrase dans ma sous-classe MKOverlayView, il n'est pas appelé. Selon la documentation, il doit être appelé avant que les tuiles ne soient rendues et s'il retourne OUI, drawMapRect est appelé. J'espérais que quelqu'un pourrait regarder le code suivant et voir s'ils peuvent comprendre pourquoi cette méthode n'est pas appelée. Est-ce que ça veut dire être activé/appelé manuellement quelque part?

Il est intéressant de noter que drawMapRect est appelé, mais ce n'est pas le cas de canDrawMapRect. Est-ce que j'interprète mal la fonctionnalité de canDrawMapRect ou quelque chose ne va pas dans mon code?

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... 
} 

Merci!

Répondre

2

Essayez de changer cette ligne:

self = [super init]; 

à cette option pour utiliser le initialiseur approprié pour un MKOverlayView:

self = [super initWithOverlay:overlay]; 
+0

La fonction canDrawMapRect se comporte maintenant comme prévu. Je vous remercie! –