1

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

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

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

4

1 に答える 1

2

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

self = [super init];

に適切なイニシャライザを使用するには、次のようにしますMKOverlayView

self = [super initWithOverlay:overlay];
于 2011-08-06T02:46:37.920 に答える