【问题标题】:Redraw MKAnnotationView重绘 MKAnnotationView
【发布时间】:2011-04-07 20:16:43
【问题描述】:

取决于 MKMapView 的缩放级别,我需要重新绘制我的自定义 MKAnnotationView。据我了解,我必须在地图控制器的下一个方法中执行此操作

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

在此处删除然后向 MKMapView 添加注释会强制 AnnotationView 闪烁。 我怎样才能以正确的方式做到这一点?

【问题讨论】:

    标签: iphone mkmapview mkannotationview


    【解决方案1】:

    您无需将其删除并重新添加。只需对自定义注释视图进行更改并调用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]; 请求重绘。您可以对图像执行相同的操作。

    【讨论】:

    • 谢谢。我疯狂地试图找到我的自定义注释视图的问题。事实证明,在我为现有视图分配新注释后 - 它并没有重绘视图。使用 SetNeededDisplay 解决了这个问题。
    • 确保您从 mapView 而不是从自身调用 setNeedsDisplay,我花了一整天的时间才发现调用 [self setNeedsDisplay]; 不会使 drawRect: 被执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多