在我的应用程序中,我在地图上显示多个annoations。我有很多不同的注释,但基本上我有12种不同的注释,每种注释都有自己的图像(所以有12种不同的注释图像)。
现在在我当前的代码中,我将MKAnnotation子类化,并给它一个属性,我称之为“标识符”,当我创建一个注释时,这个标识符将设置为适当的值,以便稍后我可以过滤一组特定的注释并给出它们是viewForAnnotation中的正确图像。
- (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id<MKAnnotation>)annotation {
CustomAnnotation *pin = annotation;
MKAnnotationView *pinView=nil;
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}
else if ([pin.identifier isEqualToString:@"tree"]) { //give annotation a tree image
pinView = (MKPinAnnotationView *)[aMapView dequeueReusableAnnotationViewWithIdentifier:@"OwnerAnnotationString"];
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"OwnerAnnotationString"];
pinView.image = [UIImage imageNamedForDevice:@"tree"];
pinView.centerOffset = CGPointMake(0, -53/2);
return pinView;
}
else if ([pin.identifier isEqualToString:@"house"]){ //give annotation a house image
pinView = (MKPinAnnotationView *)[aMapView dequeueReusableAnnotationViewWithIdentifier:@"SmallGoldPinStringAnkeren"];
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"anotheridentifier"];
pinView.image = [UIImage imageNamedForDevice:@"house"];
pinView.centerOffset = CGPointMake(8, -43/2);
return pinView;
}
//and so on
我不喜欢这个,如果过滤过程效率非常低,那么我想知道为不同的注释设置图像的最佳和最快的方法是什么。
最后这个例子是用注释完成的,但我现在多次遇到这个场景,所以实际上我的问题是:
检查您正在与哪种对象进行交互的最佳方法是什么,这样您就可以在Objective-C中为该特定对象设置适当的值。
答案 0 :(得分:0)
不是给每个注释赋予标识符,而是将它们放在NSmutableArray中,并将该数组放在NS(Mutable)Dictionary中。让字典中的密钥成为您现在拥有的标识符。这样注释已经在创建时排序,如果你需要它们,在一个数组中,你可以简单地创建一个新的可变数组,并将字典中数组中的所有对象添加到它。