我有不同位置的自定义图像,我可以同时显示所有不同的图钉。但问题是,当我显示用户的当前位置时,所有引脚颜色都会发生变化。
这是代码:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
if ([annotation isKindOfClass:[MapAnnotation class]]) {
MKAnnotationView *test=[[MKAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:@"AnnotationIdentifier"];
test.canShowCallout = YES;
// test.animatesDrop = YES;
UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
test
.rightCalloutAccessoryView = rightButton;
switch (_pushpinTag) {
case 5:
test.image = [UIImage imageNamed:@"pushpin_green.png"];
break;
case 6:
test.image = [UIImage imageNamed:@"pushpin_blue.png"];
break;
case 7:
test.image = [UIImage imageNamed:@"pushpin_black.png"];
break;
case 8:
test.image = [UIImage imageNamed:@"pushpin_yellow.png"];
break;
case 3:
test.image = [UIImage imageNamed:@"pushpin_red.png"];
break;
default:
break;
}
return test;
}
}
现在,在按下不同的按钮时,会显示不同的Pins(带有自定义图像)。让我说我有绿色,蓝色,黑色和黄色的针脚。我按下按钮显示Green Pins,然后按For Blue,然后按Black,所有Pins显示在各自的图像中。但是,当我按下按钮显示用户当前位置时,所有引脚都会更改为最后一次按下引脚,即黑色。
以下是显示用户当前位置的代码:
- (IBAction)currentLocationButton:(id)sender {
_mapView.showsUserLocation = YES;
[_mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:YES];
}
有人能指出我做错了吗?
谢谢大家:)
答案 0 :(得分:2)
您的注释需要包含可用于在viewForAnnotation中设置颜色的内容。 MKAnnotation协议定义了具有标题,副标题和坐标的所有注释。如果标题和副标题不足以确定您想要引脚的颜色,请编写自己的类并添加名为pinType的属性。然后根据用户按下的按钮创建注释设置pinType。当调用viewForAnnotation时,您可以执行通常的dequeueReusableAnnotationViewWithIdentifier / initWithAnnotation来准备视图,将提供的注释强制转换为类并使用其pinType来设置图像。这里有一些未经测试的代码,足以给你提供想法
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MyAnnotation class]])
{
MyAnnotation* myAnno = (MyAnnotation)annotation;
MKAnnotationView *test;
test = (MKAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:@"AnnotationIdentifier"];
if (view == nil)
{
test=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"AnnotationIdentifier"];
}
switch(myAnno.pinType)
{
case kBLACK_TAG: test.image = [UIImage imageNamed:@"pushpin_black.png"];
break;
}
}
}
答案 1 :(得分:1)
您没有使用可重复使用的观点
MKAnnotationView *test;
test = (MKAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:@"AnnotationIdentifier"];
if (view == nil)
{
test=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"AnnotationIdentifier"];
test.tag = _pushpinTag; // set tag of new pins to _pushpinTag
}
其次,您的一般错误是逻辑错误。每当iOS要求您的注释视图时,您将根据_pushpinTag的值设置图像,这就是为什么所有引脚都重绘为最后选择的颜色。如果您还在引脚上设置了TAG值,请执行以下操作:
static int kGREEN_TAG = 5;
static int kBLUE_TAG = 6;
static int kBLACK_TAG = 7;
static int kYELLOW_TAG = 8;
switch (test.tag)
{
case kBLACK_TAG:
test.image = [UIImage imageNamed:@"pushpin_black.png"];
break;
.
.
.
}