私は、地図上に 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 として返されます