我有一个NSArray
自定义MKAnnotation
,我需要为第一个/最后一个注释设置一个红色引脚颜色,否则设置一个绿色引脚。该程序的行为不像我想要的那样,绿色引脚每次都以随机方式与两个不同的注释相关联,不像我想要的那样与第一个和最后一个相关联。
所以,这就是我在我的控制器中所做的:
- (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:当我写完这个问题时,我发现了这个回复,似乎证实了我的理论。有人已经遇到过类似的问题吗?
编辑:经过几次测试,我意识到完成我想要的最好的方法是首先为我的第一个/最后一个注释设置一个标签:
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];
}
经过一周的测试,这对我有用,如果有人有更好的想法,将不胜感激。