iPhone MapKit - 更新注释坐标和地图

时间:2009-12-09 13:05:26

标签: iphone objective-c mapkit

我使用本教程将MapKit集成到我的应用程序: http://iphonebcit.wordpress.com/iphone-map-kit-tutorial/

CLLocationCoordinate2D coordinate;
coordinate.latitude = 49.2802;
coordinate.longitude = -123.1182;

NSUInteger count = 1;
for(int i = 0; i < 10; i++) {
    CGFloat latDelta = rand()*.035/RAND_MAX - .02;
    CGFloat longDelta = rand()*.03/RAND_MAX - .015;

    CLLocationCoordinate2D newCoord = {coordinate.latitude+latDelta, coordinate.longitude+longDelta};
    MapDemoAnnotation* annotation = [[MapDemoAnnotation alloc] initWithCoordinate:newCoord andID:count++];
    [mapView addAnnotation:annotation];
    [annotation release];
}

- (MKAnnotationView *)mapView:(MKMapView *)mapViewLocal viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = (MKPinAnnotationView*)[mapViewLocal dequeueReusableAnnotationViewWithIdentifier:@"Pin"];
if(pinView == nil) {
    pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"];
    pinView.pinColor = MKPinAnnotationColorPurple;
    pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    pinView.animatesDrop = YES;
    pinView.canShowCallout = YES;
} else {
    pinView.annotation = annotation;
}
return pinView;

}

因此引脚将随机设置在地图上。在我的应用程序中,坐标将发生变化。如何更改注释的坐标,以便在地图上更新?

有人知道吗?

3 个答案:

答案 0 :(得分:2)

在iPhone SDK 3.x中,您必须删除引脚注释并重新设置。如果您的地图上有许多注释,那就不太好了。

我试着让它更好,所以我要显示/更新屏幕上的引脚注释。因此,如果用户放大到纽约,旧金山将不会有针注释或用户无法看到。所以性能会好很多。

也许将来这是可能的。我希望如此: - )

答案 1 :(得分:1)

该教程仅用于显示地图视图,而不是其他内容。你需要一个更大的教程。我发现这个有用:

http://blog.objectgraph.com/index.php/2009/04/02/iphone-sdk-30-playing-with-map-kit/

您可能需要做的是循环遍历地图上的所有注释,删除它们,然后遍历数据数组,再次添加注释。你可以更聪明地循环数据阵列,检查地图上是否已经有一个具有相同纬度/经度的引脚,但这种方式变得更加复杂。

答案 2 :(得分:1)

因为我正在做注释,所以我只是做了一个快速测试。您确实收到编译器警告,因此可能不受支持。但它确实有效。

创建一个自定义MKAnnotation类,以便您可以将coordinate属性设置为可写:

@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate;

然后,无论您想要什么样的事件或间隔,都可以使用以下内容更改坐标:

    CLLocation *loc=[[CLLocation alloc] initWithLatitude:55.0 longitude:17.0];
annotation.coordinate=loc.coordinate;
[loc release];