我正在使用MKMapView和MKAnnotations在xCode中創建應用程序。如果您製作兩個以上的註釋,則額外的航點顏色(PinAnnotations)應更改爲紫色。在MapView.annotations中獲取MKAnnotation的索引
因此我需要標記,IndexPath或標識中的ID來標識MKAnnotation函數中的MKAnnotation。我用這行代碼:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
MKPinAnnotationView *pinView = nil;
if (annotation != mkMap.userLocation)
{
static NSString *defaultPinID = @"aPin";
pinView = (MKPinAnnotationView *)[mkMap dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
if (pinView == nil)
{
pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID];
pinView.canShowCallout = YES;
pinView.tag = mapView.annotations.count; // tag is not available for annotation in this function
}
}
pinView.canShowCallout = YES;
pinView.animatesDrop = YES;
pinView.draggable = YES;
if ([annotation isKindOfClass:[MKUserLocation class]])
return pinView;
NSLog(@"Annotation-Index: %d", [mapView.annotations indexOfObject:annotation]);
NSLog(@"MapView.annotations.count = %d", mapView.annotations.count);
if (1 == [mapView.annotations indexOfObject:annotation])
pinView.pinColor = MKPinAnnotationColorGreen;
else if (1 < [mapView.annotations indexOfObject:annotation])
{
pinView.pinColor = MKPinAnnotationColorRed;
// checkes for extra waypoints
if (2 < mapView.annotations.count)
{
for (int i = 2; i > mapView.annotations.count; i++)
{
MKPinAnnotationView *aView = [mapView.annotations objectAtIndex:i];
aView.pinColor = MKPinAnnotationColorPurple;
[mapView removeAnnotation:mapView.annotations[i]];
NSMutableArray *a = [[NSMutableArray alloc] init];
[a replaceObjectAtIndex:i withObject:aView];
[mapView addAnnotations:a];
}
}
}
return pinView;
}
我已谷歌這個問題,並找到了一些解決方案,像我一樣
int AnnotationIndex = [mapView.annotations indexOfObject:annotation];
但這個函數的輸出(譯註指數)撞擊我的心靈。有時候一切都很好,但註釋索引具有正確的值,但大多數情況下,值似乎是隨機生成的,並且如果MapView.annotations.count只有3,則比例從0增加到10!
此致敬意!
您可以打印出註釋的標題,以便更好地理解所發生的情況。 ('view.annotation'的標題以及所有'mapView.annotations'的標題) – aforaudrey
您知道,當用戶點擊它時,您的代碼只會在數組中插入註釋嗎? 來自Apple文檔: mapView:annotationView:calloutAccessoryControlTapped: 通知代表用戶點擊其中一個註釋視圖的附件按鈕。 –
對不起,我進入了一個錯誤的例子,並注意到它太晚了,但現在我編輯了它......但你是對的我會嘗試 – user3191334