1

これは、このサイトでの最初の質問です。

私のコードは、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;
    }
4

1 に答える 1

1

あなたの問題は一般的なものだと思います。PinColor はどこに設定されていますか? mapview マップは、任意の注釈に対していつでも注釈を描画するように annotationView を要求します。PinColor が他の方法で 0 に設定されている場合、mapview が注釈を描画しようとすると、赤いピンが描画されます。あなたがする必要があるのは、あなたが描いている注釈をチェックして、それに適切な色を使うことです. タイトルを読んで注釈を確認できます。独自の注釈クラスの場合は、使用できる他のプロパティがある可能性があります。

補足: 両方のピン バージョンで繰り返した行がいくつかあります。それらを IF ステートメントの外側に配置し、いくつかの行を切り取る必要があります。そして、次のような mapView を使用する必要がありviewForAnnotationます。

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

MKAnnotationView* pinview = nil;
if (annotation is the red one) {
    pinview = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"identifier"];
    if (nil == pinview) {                 
        pinview = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"identifier"];
        pinview.image = [UIImage imageNamed:@"redpin.png"];
     }        
} else {
   pinview = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"Orangeidentifier"];
    if (nil == pinview) {                
        pinview = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Orangeidentifier"];
        pinview.image = [UIImage imageNamed:@"pin glabensmall.png"]; //orange pin           
    }
}

[pinview setCanShowCallout:YES];                

pinview.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

pinview.opaque = YES;
if (self.newPinAdded) {
    [pinview setSelected: YES];                    
}

}
于 2013-02-28T00:21:24.960 に答える