要更改標註的座標不刪除,重新創建和重新加入,創建一個註解類,其中coordinate
屬性設定。一個簡單的方法來做到這一點是確定coordinate
屬性是這樣的:
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
或者,而不是定義自己的類,你還可以使用內置的MKPointAnnotation
類具有可設置coordinate
。
您最初創建並添加註釋照常。例如:
MKPointAnnotation *pa = [[MKPointAnnotation alloc] init];
pa.coordinate = someCoordinate;
pa.title = @"User1";
[mapView addAnnotation:pa];
[pa release];
後來,當你從服務器的更新,併爲「用戶1」變化的座標,您可以搜索該用戶的地圖視圖的annotations
陣列中的註解或存儲到註釋中引用在一些其他結構中,允許使用諸如NSMutableDictionary
之類的鍵快速訪問。
找到註釋後,只需將註釋的coordinate
屬性設置爲新值,地圖視圖就會自動將註釋視圖移動到新位置。
此示例搜索annotations
陣列:
for (id<MKAnnotation> ann in mapView.annotations)
{
if ([ann.title isEqualToString:@"User1"])
{
ann.coordinate = theNewCoordinate;
break;
}
}
如果你想用你的註釋類的不同,自定義屬性(比如說一些的int命名userIdNumber)找到註解:
for (id<MKAnnotation> ann in mapView.annotations)
{
if ([ann isKindOfClass:[YourAnnotationClass class]])
{
YourAnnotationClass *yacAnn = (YourAnnotationClass *)ann;
if (yacAnn.userIdNumber == user1Id)
{
yacAnn.coordinate = theNewCoordinate;
break;
}
}
}
以上只是如何改變座標的一個例子。如果您在座標變化時有很多註釋,我不建議一次一個地搜索它們。相反,您可以將引用存儲在字典中,並使用鍵值快速查找它們。
請詳細解釋爲何setCoordinate沒有工作(編譯錯誤,警告,運行時錯誤和崩潰,等)。顯示註釋類.h和.m。不明白你最後一段的意思(「不要觸摸和拖動類...」)。 – Anna 2012-03-05 13:08:59
其實我不知道如何訪問MKMapView中的MKAnnotation對象(除了「viewForAnnotation:(id)註釋」)之外的任何地方..我試過.... NSArray * pinGreen = [[NSArray alloc] initWithArray:[self。 mapView註釋]]; \t的for(int i = 0; I <[pinGreen計數];我++){ \t \t如果([[pinGreen objectAtIndex:ⅰ] isKindOfClass:[MapViewAnnotation類]]) \t \t { \t \t \t \t \t \t [self.mapView removeAnnotation:[pinGreen objectAtIndex:i]]; \t \t \t \t \t \t \t} \t \t \t \t \t} ......但是這給 「MapViewAnnotation」 類型的對象不是 「MKAnnotation」 和setCoordinate它需要爲[someAnnotation setCoordinate:cordinate ] –
2012-03-06 07:29:00
你的結論是「不可能」是不正確的。當然,您可以直接或間接使用註釋上的setCoordinate來移動註釋視圖。 – Anna 2012-03-06 13:22:23