これは、このサイトでの最初の質問です。
私のコードは、iOS 6 Mapkit、Objective-C を使用して次の関数に実装されています。
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
カスタム ピン画像を含む注釈は 2 つしかありません。1 本の赤いピンともう 1 本のオレンジのピン。赤いピンはデバイス マップ エリア内のユーザーの現在の位置に近く、もう 1 つのオレンジ色のピンは 30 マイル離れています (現在のマップ コンテキストの外側)。各ピンの背後にあるデータに基づいて、異なる色を使用しています。
問題: 注釈用のカスタム イメージがイメージを切り替える。
dequeueReusableAnnotationViewWithIdentifierなどの使用を含むこのサイトのすべてのヒントを使用するのは私のコードです。
アプリの起動時にマップを最初に表示すると、オレンジ色のピンがデバイス マップに表示され、赤いピンが外側に表示されるというエラーが表示されます。赤色のイメージがデバイス マップに表示されているはずなので、これは正しくありません。
地図上の [検索] ボタンをタップして現在の場所を更新すると、地図上に赤いピンが表示されますが、これは正しいものです。「Find Me」をもう一度タップすると、赤いピンがオレンジ色のピンに切り替わり、ピンの画像の色が切り替わったり、トグルしたりし続けます。
if (PinColor == 0) {
MKAnnotationView* pinview = (MKAnnotationView *)[self._mapView dequeueReusableAnnotationViewWithIdentifier:@"identifier"];
if (nil == pinview) {
MKAnnotationView* view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"identifier"];
view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
view.opaque = YES;
view.image = [UIImage imageNamed:@"redpin.png"];
[view setCanShowCallout:YES];
if (self.newPinAdded) {
[view setSelected: YES];
}
return view;
}
return pinview;
}
else {
MKAnnotationView* pinview = (MKAnnotationView *)[self._mapView dequeueReusableAnnotationViewWithIdentifier:@"Orangeidentifier"];
if (nil == pinview) {
MKAnnotationView* view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Orangeidentifier"];
view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
view.image = [UIImage imageNamed:@"pin glabensmall.png"]; //orange pin
view.opaque = YES;
[view setCanShowCallout:YES];
if (self.newPinAdded) {
[view setSelected: YES];
}
return view;
}
return pinview;
}