5

私は、地図上に 7 種類の注釈を表示する小さなプロジェクトに取り組んでいます。私の注釈は配列の URL 結果から取得され、JSON を使用して解析します。たくさんの注釈があり、マップが読み込まれるとすべてが見栄えがよくなります。ズームインおよびズームアウトした後、ピンの画像が何らかの理由で間違ったピンの画像に変わります (特定の画像、理由はわかりません)。

私はここに何かが欠けていると確信しています...助けてください:)?

これが私のコードの一部です。これ以上必要な場合はお知らせください。

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{

static NSString *identifier;

if(_mapView.tag==1){identifier = @"TurbulencePin";}
if(_mapView.tag==2){identifier = @"IcingPin";}
if(_mapView.tag==3){identifier = @"WindsPin";}
if(_mapView.tag==4){identifier = @"TemperaturePin";}
if(_mapView.tag==5){identifier = @"CloudsPin";}
if(_mapView.tag==6){identifier = @"VisibilityPin";}
if(_mapView.tag==7){identifier = @"MultiplePin";}


if ([annotation isKindOfClass:[MKUserLocation class]])
    return nil;

if ([annotation isKindOfClass:[Annotation class]]) {

    CustomAnnotationView* annotationView = (CustomAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    annotationView = nil;

    if (annotationView == nil) {

        annotationView = [[CustomAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
        annotationView.enabled = YES;
        annotationView.canShowCallout = YES;


        UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"%@.png",identifier]];
        annotationView.image = img;

    }
else
    {

        annotationView.annotation = annotation;

    }


    return annotationView;

}
return nil;

}

アップデート:

他のユーザーからのフィードバックに基づいて、画像設定のコードを次のように変更しました。

 Annotation *myCustomAnn = (Annotation *)annotation;
 NSString *imgName = myCustomAnn.imageName;
 UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"%@Pin.png",imgName]];
 annotationView.image = img;

 return annotationView;

さらに、私はannotationView = nil;

ただし、注釈ごとに異なるピン画像を表示する必要があるため、annotation.m の画像名をハードコードされた値として設定することはできません。説明があると確信していますが、 mapView:viewForAnnotation: の下のannotation.mから​​取得できる唯一の値は、注釈の座標です(myCustomAnn.coordinate.latitudeそしてmyCustomAnn.coordinate.longitude)、注釈から他のプロパティを取得する方法がわかりません.m

title、imgname などの他のプロパティは null として返されます

4

3 に答える 3

0

1 つの問題は、viewForAnnotationがクラス インスタンス変数に基づいて表示する正しい画像を決定していることです。通常、注釈の画像の識別子は、外部インスタンス変数ではなく、カスタム注釈自体のプロパティになります。

その上、アノテーションのすべてのプロパティが設定される前に、アノテーションがマップに追加されているように見えました。addAnnotation注釈のすべてのプロパティが設定されるまで、を延期する必要があります。

または、注釈を に追加し、必要NSMutableArrayに応じて微調整し、(s に注意してください) を使用して注釈を最後に追加しaddAnnotations、配列に渡すこともできます。

于 2013-05-11T16:04:42.103 に答える