0

私は XCode と iPhone の開発に非常に慣れていないので、この質問が単純すぎる場合はご容赦ください。しかし、私は地図を持っていて、注釈用に画像 (ピンではなく) を正常に追加しました。また、ユーザーが注釈の 1 つを選択すると、画像を変更できます。

次のメソッドを使用して MKAnnotationView から継承するクラスを作成しました:-

- (id)initWithAnnotation:

- (void)setAnnotation:

- (void)drawRect:

そして私は使用しています

- (void)touchesBegan

注釈がいつ選択されたかを知る。そして、私がやっていることを始めました:-

UIImage *i = [UIImage imageNamed:@"A.png"];
self.image = i;

イメージを変更します。しかし、私が本当に困惑しているのは、ユーザーが次の注釈を選択したときに、画像を元の画像に戻す方法です。私が試してみました:-

NSArray *selectedAnnotations = map.selectedAnnotations;
for(id annotationView in selectedAnnotations) {
[map deselectAnnotation:[annotationView annotation] animated:NO];
}

しかし、それはエラーです

そして私は試しました

for (MKAnnotationView *ann in map.selectedAnnotations){
if ([ann isMemberOfClass:[Place class]])
{
place = (Place *)ann;
NSLog(@"second = %@"@" %f"@" %f", place.title, place.longitude, place.latitude);
if (currentPlaceID == place.placeID) {
//UIImage *i = [UIImage imageNamed:@"A.png"];

//ann.image = i;
}
else {
UIImage *i = [UIImage imageNamed:@"pin.png"];

ann.image = i;
}
}

}

ann.image = i; に到達するまで、上記のコードは問題なく動作します。その後、エラーになります。私が得るエラーは次のとおりです:-

*** -[Place setImage:]: unrecognized selector sent to instance 0x4514370
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[Place setImage:]: unrecognized selector sent to instance 0x4514370'

はい、場所オブジェクトに画像がないことがわかります。そのため、問題が発生しています。しかし、場所オブジェクトに画像プロパティを作成すると、私がやろうとしている注釈画像がどのように変化しますか。

私はこれについて2日間ぐるぐる回っているので、アドバイスしてください!!!!

前もって感謝します シェリル

4

1 に答える 1

0

シェリル、

私はあなたがやろうとしていることを完全にフォローしているわけではありませんが、ここにいくつかの考えがあります:

元の画像を復元するために私がすることは次のとおりです。

MKAnnotationView のサブクラスで、2 つの UIImage プロパティを追加します。

firstImage と secondImage、保持するように設定します。

注釈ビューを開始するときに、両方の画像を設定します。(画像を注釈ビューに割り当てた時点で、新しい firstImage プロパティにも保存します)

次に、あなたは言うことができます

self.image = firstImage;

また

self.image = secondImage.

これにより、適切なイメージが所定の位置にスワップされ、他のイメージは復元されたままになります。

あなたのコード:

NSArray *selectedAnnotations = map.selectedAnnotations; for(id annotationView in selectedAnnotations) { [map    
deselectAnnotation:[annotationView annotation] animated:NO]; }

正しくありません。マップに注釈の配列を要求し、それらを注釈 VIEW として扱います。

注釈はデ​​ータ モデル オブジェクトです。注釈を記述するデータが含まれています。

注釈 VIEW オブジェクトは、注釈が現在表示されている場合にマップ上に注釈を表示するために使用される一時的な表示オブジェクトです。マップ上のすべての注釈に常に注釈ビューがあるとは限りません。

于 2009-11-12T20:56:24.997 に答える