2011-04-07 79 views
2

取决于MKMapView的缩放级别我需要重新绘制自定义的MKAnnotationView。至于,我明白我必须做的映象控制器重绘MKAnnotationView

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated 

删除的下一个方法,然后添加注释这里的MKMapView强制AnnotationView的闪烁。 如何以正确的方式做到这一点?

回答

3

您不需要删除它并将其添加回来。只需在自定义注释视图上进行更改并致电setNeedsDisplay即可。例如:

@interface AnnotationClusterView : MKAnnotationView { 
@property (nonatomic, assign) int badgeNumber; 
} 
@implementation AnnotationClusterView 
@synthesize badgeNumber; 
// ... 
- (void)drawRect:(CGRect)rect { 
    NSString *string = [NSString stringWithFormat:@"%d",self.badgeNumber]; 
    [string drawInRect:stringRect withFont:[UIFont fontWithName:@"Helvetica-Bold" size:13.0]]; 
} 
@end 

当变焦的变化,得到了MKAnnotationView参考,设置不同的badgeNumber,并要求重绘调用[myView setNeedsDisplay];。你可以为图像做同样的事情。

+0

感谢您的支持。我疯了试图找到我的自定义注释视图的问题。事实证明,在我为现有视图分配了一个新的注释之后 - 它不会重新绘制视图。使用SetNeededDisplay修复了这个问题。 – EasyCoder 2011-07-03 16:28:51

+0

确保你从mapView调用setNeedsDisplay,而不是从本身调用setNeedsDisplay,我花了整整一天的时间来调用'[self setNeedsDisplay];'不会使'drawRect:'执行。 – 2013-10-11 17:33:57