0

私のアプリでは、地図上に複数の注釈を表示しています。さまざまな注釈がたくさんありますが、基本的には、それぞれ独自の画像を持つ 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で特定のオブジェクトに適切な値を設定できるように、対話しているオブジェクトの種類を確認する最良の方法は何ですか?

4

1 に答える 1

0

各注釈に識別子を与える代わりに、それらを NSmutableArray に配置し、その配列を NS(Mutable)Dictionary に配置します。その辞書のキーを、識別子として現在持っているものにします。このようにして、注釈は作成時に既にソートされています。それらすべてが 1 つの配列で必要な場合は、新しい可変配列を作成し、ディクショナリ内の配列からすべてのオブジェクトを追加するだけです。

于 2013-09-09T15:09:19.100 に答える