gpt4 book ai didi

ios - 根据服务器数据(经纬度)移动MKMapView中的注解

转载 作者:可可西里 更新时间:2023-11-01 05:47:04 27 4
gpt4 key购买 nike

在我的应用程序中,我通过以特定时间间隔从服务器获取他们的位置(纬度和经度)来显示其他人的位置。

获取后,我必须删除所有注释并删除基于服务器数据的新注释。

但它看起来非常低效,因为当我们以前存在相同用户的注释时,即使我正在删除和添加相同的用户注释。

所以我想知道我们能否将 MKAnnotation 从一个坐标移动到另一个坐标?我已经尝试过“setCoordinate”属性,但无法成功实现它。

它也不是“触摸和拖动”的那种。当应用从服务器获取数据(纬度和经度)时,注释会自行移动。

最佳答案

要在不删除、重新创建和添加注释的情况下更改注释的坐标,请创建一个注释类,其中 coordinate 属性是可设置的。一种简单的方法是像这样定义 coordinate 属性:

@property (nonatomic, assign) CLLocationCoordinate2D coordinate;

或者,除了定义您自己的类之外,您还可以使用内置的 MKPointAnnotation 类,它具有可设置的坐标

您最初像往常一样创建和添加注释。例如:

MKPointAnnotation *pa = [[MKPointAnnotation alloc] init];
pa.coordinate = someCoordinate;
pa.title = @"User1";
[mapView addAnnotation:pa];
[pa release];

稍后,当您从服务器获得更新并且“User1”的坐标发生变化时,您可以在 map View 的 annotations 数组中搜索该用户的注释或存储对注释的引用在其他一些允许使用键快速访问的结构中,例如 NSMutableDictionary

一旦找到注释,只需将注释的 coordinate 属性设置为新值, map View 就会自动将注释的 View 移动到新位置。

此示例搜索 annotations 数组:

for (id<MKAnnotation> ann in mapView.annotations)
{
if ([ann.title isEqualToString:@"User1"])
{
ann.coordinate = theNewCoordinate;
break;
}
}

如果您想使用注释类的不同自定义属性(比如一些名为 userIdNumber 的 int)来查找注释:

for (id<MKAnnotation> ann in mapView.annotations)
{
if ([ann isKindOfClass:[YourAnnotationClass class]])
{
YourAnnotationClass *yacAnn = (YourAnnotationClass *)ann;
if (yacAnn.userIdNumber == user1Id)
{
yacAnn.coordinate = theNewCoordinate;
break;
}
}
}

以上只是一个如何改变坐标的例子。如果您有很多坐标不断变化的注释,我不建议您一次只搜索一个。相反,您可以将引用存储在字典中并使用键值快速查找它们。

关于ios - 根据服务器数据(经纬度)移动MKMapView中的注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9563137/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com