我使用本教程将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;
}
因此引脚将随机设置在地图上。在我的应用程序中,坐标将发生变化。如何更改注释的坐标,以便在地图上更新?
有人知道吗?
答案 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];