• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

objective-c - ios: MapView Pin 颜色注释不断变化;为什么?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 00:14:32 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

您好,感谢您的帮助。

我正在使用以下代码在我的 MapView 注释上设置图钉颜色?

- (MKAnnotationView *)mapViewMKMapView *)mapView viewForAnnotationid <MKAnnotation>)annotation {




    MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier"pinView"];
    if (!pinView) {

        //////////////
        pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier"pinView"];
        pinView.pinColor = MKPinAnnotationColorGreen;
        if([[annotation title] isEqualToString"MuRoom"])
        {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorRed;

            NSLog( @"data from ann index %@", annTile);
        }
        if([[annotation title] isEqualToString"Mike's"])
        {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorRed;

            NSLog( @"data from ann index %@", annTile);
        }
        if([[annotation title] isEqualToString"Bill's"])
        {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorPurple;

            NSLog( @"data from ann index %@", annTile);
        }
        if([[annotation title] isEqualToString"Steve's"])
        {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorGreen;

            NSLog( @"data from ann index %@", annTile);
        }
        if([[annotation title] isEqualToString"Louisa's"])
        {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorGreen;

            NSLog( @"data from ann index %@", annTile);
        }


        pinView.animatesDrop = YES;
        pinView.canShowCallout = YES;

        UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinView.rightCalloutAccessoryView = rightButton;
    } else {
        pinView.annotation = annotation;
    }
    return pinView;
}


I am then using the function below to filter my pins locaions



-(void)FilterAddAllid)sender
{
    [mapview removeAnnotations:annoArra];
    [mapview removeAnnotations:annoArrayVenue];
 [mapview removeAnnotations:artArray];


//    CLLocationCoordinate2D center = mapview.centerCoordinate;
//    mapview.centerCoordinate = center;


    [mapview addAnnotations:annoArra];
    [mapview addAnnotations:annoArrayVenue];
    [mapview addAnnotations:artArray];

}

-(void)FilterArtid)sender
{
    [mapview removeAnnotations:annoArra];
    [mapview removeAnnotations:artArray];
    [mapview removeAnnotations:annoArrayVenue];

    [mapview addAnnotations:annoArra];
}

-(void)FilterVenueid)sender
{
    [mapview removeAnnotations:annoArra];
    [mapview removeAnnotations:artArray];
    [mapview removeAnnotations:annoArrayVenue];

    [mapview addAnnotations:artArray];
}

问题:如何让引脚颜色保持原来的颜色?在我过滤后,它们会作为随机的 pin 颜色返回。

再次感谢。



Best Answer-推荐答案


这是因为您没有正确使用“reuseIdentifier”。当您从 dequeueReusableAnnotationViewWithIdentifier"pinView"取回 pin 时,您需要:

始终设置图钉颜色,或者 为每个彩色图钉使用不同的重用标识符

即你可能会得到一个带有红色图钉的可重用 View ,并且你想显示一个蓝色图钉

示例:

MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier"pinView"];
    if (!pinView) {

        //////////////
        pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier"pinView"];

        pinView.animatesDrop = YES;
        pinView.canShowCallout = YES;

        UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinView.rightCalloutAccessoryView = rightButton;
    } else {
        pinView.annotation = annotation;
    }

// SET THE PIN COLOR REGARDLESS OF WHETHER A REUSABLE ANNOTATION WAS RETURNED OR NOT

        pinView.pinColor = MKPinAnnotationColorGreen;
        if([[annotation title] isEqualToString:@"MuRoom"])
        {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorRed;

            NSLog( @"data from ann index %@", annTile);
        }
        if([[annotation title] isEqualToString:@"Mike's"])
        {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorRed;

            NSLog( @"data from ann index %@", annTile);
        }
        if([[annotation title] isEqualToString:@"Bill's"])
        {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorPurple;

            NSLog( @"data from ann index %@", annTile);
        }
        if([[annotation title] isEqualToString:@"Steve's"])
        {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorGreen;

            NSLog( @"data from ann index %@", annTile);
        }
        if([[annotation title] isEqualToString:@"Louisa's"])
        {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorGreen;

            NSLog( @"data from ann index %@", annTile);
        }

关于objective-c - ios: MapView Pin 颜色注释不断变化;为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14106033/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap