子类化MKOVerlay View- canDrawMapRect未调用

时间:2011-08-05 20:22:46

标签: iphone mkmapview mkoverlay

我正在尝试将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...
}

谢谢!

1 个答案:

答案 0 :(得分:2)

尝试更改此行:

self = [super init];

使用适当的初始值设定项MKOverlayView

self = [super initWithOverlay:overlay];