2009-10-29 196 views
0

我很新的Xcode和iPhone開發所以請多多包涵,如果這個問題太簡單了。但是我有一張地圖,並且我已經成功添加了圖像(而不是針)用於註釋。當用戶選擇其中一個註釋時,我可以更改圖像。mapkit和註釋

我創建了一個從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 =我;那就錯了。我得到的錯誤是: -

*** -[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天!!!!

在此先感謝 謝麗爾

回答

0

謝麗爾,

我不完全跟隨你想要做什麼,但這裏有一些想法:

這裏是我會做什麼恢復原始圖像:

在你MKAnnotationView的子類,添加兩個UIImage的屬性,

冷杉tImage和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對象是一個臨時顯示對象,用於在地圖上顯示註釋(如果當前可見)。對於地圖上的每個註釋,並不總是有註釋視圖。