【问题标题】:MKMapView switches between pin color annotationsMKMapView 在引脚颜色注释之间切换
【发布时间】:2014-05-07 17:23:44
【问题描述】:

我的地图上有一堆图钉,一些是红色的,一些是绿色的。初始着色还可以。但是,当我使用地图视图并点击一些绿色时,一些红色会变为绿色。当它们在当前视图区域之外并移动到视图区域时,可能会发生这种情况。 有什么想法吗?

这是我的代码片段:

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id < MKAnnotation >)annotation{

    if(((MyAnnotation*)annotation).isGreen){
        AnnotationViewID = @"MyAnnotationGreen";
    }else{
        AnnotationViewID = @"MyAnnotationRed";
    }

    MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

    if (annotationView == nil)
    {
        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
    }

【问题讨论】:

  • 不应该AnnotationViewID 是一个局部变量吗?

标签: ios ios7 mkmapview mkannotation


【解决方案1】:

您应该使用 MyAnnotation 对象的 isGreen 属性将颜色分配给您的 MKPinAnnotationView 对象。重用代码可能会为您提供一个没有正确设置所有属性的对象,特别是因为您在不同标识符下使用完全相同的类。您不应依赖视图缓存中出队对象的所有属性值的有效性(例如 uitableview 出队)。

做一些类似的事情:

MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

if (annotationView == nil)
{
    annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
}
[annotationView setPinColor:(annotation.isGreen)? MKPinAnnotationColorGreen : MKPinAnnotationColorRed];

【讨论】:

    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多