gpt4 book ai didi

iphone - 为 MKMapView 上的第一个和最后一个 MKAnnotation 设置 MKPinAnnotationColorRed

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:35 25 4
gpt4 key购买 nike

我有一个自定义 MKAnnotationNSArray,我需要为第一个/最后一个注释设置红色引脚颜色,否则设置绿色引脚。该程序没有按我想要的方式运行,绿色引脚每次都以随机方式与两个不同的注释相关联,而不是像我想要的那样与第一个和最后一个相关联。

所以,这就是我在我的 Controller 中所做的:

- (void)viewDidLoad
{
[super viewDidLoad];
//load set a coords from file etc...
//self.coordinates is the array of annotations
[self.myMap addAnnotations:self.coordinates];
}

然后在 viewForAnnotation: 回调中:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{
NSString *ident = @"MY_IDENTIFIER";
MKPinAnnotationView *annView=(MKPinAnnotationView *)[self.myMap dequeueReusableAnnotationViewWithIdentifier:ident];
if(self.myMap.userLocation==annotation){
return nil;
}
if(annView == nil){
annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ident];
annView.animatesDrop=TRUE;
annView.canShowCallout = YES;
annView.rightCalloutAccessoryView=[UIButton buttonWithType:UIButtonTypeDetailDisclosure];
annView.calloutOffset = CGPointMake(-5, 5);
int currIdxAnn=[self.myMap.annotations indexOfObject:annotation];
int lastIdxAnn=[self.myMap.annotations indexOfObject:[self.myMap.annotations lastObject]];
/*
if (currIdxAnn==0 || currIdxAnn==lastIdxAnn) {
annView.pinColor=MKPinAnnotationColorRed;
}else {
annView.pinColor=MKPinAnnotationColorGreen;
}*/
CustomAnnotation *an=(CustomAnnotation *)annotation;
if (an.tag==98||an.tag==99) {
annView.pinColor=MKPinAnnotationColorGreen;
}else {
annView.pinColor=MKPinAnnotationColorRed;
}

}
return annView;
}

addAnnotations: 方法似乎并不像我相信的那样工作,可能以不同于数组的顺序加载注释。可能吗?
我也尝试在 didAddAnnotationViews: 中进行类似的处理,但没有很好的结果。

一些提示?谢谢。

PS: 当我写完这个问题时,我发现 this react ,似乎证实了我的理论。有人遇到过类似的问题吗?

编辑:经过多次测试,我意识到完成我想要的最好方法是首先为我的第一个/最后一个注释设置一个标签:

CustomAnnotation *first=[self.coordinates objectAtIndex:0];
first.tag=98;
CustomAnnotation *last=[self.coordinates objectAtIndex:[self.coordinates indexOfObject:[self.coordinates lastObject]]];
last.tag=99;

然后如您所见,我稍微修改了 viewForAnnotation 以了解注释是我要查找的注释。然后诀窍就是调用在后台线程中添加注释的函数,例如:

[self performSelectorInBackground:@selector(addAllAnnot) withObject:nil];

-(void)addAllAnnot{

[self.myMap addAnnotations:self.coordinates];
}

经过一周的测试,这对我有用,如果有人有更好的主意,我们将不胜感激。

最佳答案

查看您在回答中提到的答案,我认为您无法确定添加这些注释的顺序或它们在 map View 的内部列表中的索引。

那么你有什么选择..?与往常一样,最基本的是对 MKAnnotation 类进行子类化并向其添加一个属性,通过该属性您可以区分要添加的注释。因此,只需在数组中添加这些注释时设置属性...希望这能解决您的问题..

关于iphone - 为 MKMapView 上的第一个和最后一个 MKAnnotation 设置 MKPinAnnotationColorRed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10056677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com