2011-08-05 7 views
1

MKOverlayViewをサブクラス化してカスタムオーバーレイを作成しようとしています。これを行うには、次の2つの方法をオーバーライドする必要があることを理解しています。サブクラス化MKOVerlay View- canDrawMapRectが呼び出されない

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

ありがとうございました!

答えて

2

は、この行を変更してみてください:

self = [super init]; 

これにMKOverlayViewのための適切な初期化子を使用する:

self = [super initWithOverlay:overlay]; 
+0

予想通りcanDrawMapRect機能は現在動作します。ありがとうございました! –

関連する問題