2009-12-09 69 views
2

我使用本教程整合MapKit给我的应用程序: http://iphonebcit.wordpress.com/iphone-map-kit-tutorial/iPhone MapKit - 更新注释坐标和地图

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; 

}

使引脚将设置随机地图。在我的应用程序中,坐标将会改变。如何更改注释的坐标,以便它们在地图上更新?

有谁知道吗?

回答

2

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

我试图让它更好,所以我ony显示/更新我的pin注释在屏幕上。因此,如果用户放大到纽约,旧金山将不会有注释或其他用户看不到的注释。所以表现会好很多。

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

1

该教程仅用于获取地图视图以显示,没有别的。你将需要一个更大的教程。我发现这是有用的:通过地图上的所有注释

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

可能就是你需要做的是循环,去除它们,然后通过你的数据数组循环,再次添加注释。你可以更聪明一点,并循环访问数据数组,检查地图上是否已经有一个与纬度/经度相同的pin,但这种方式会变得更加复杂。

+0

非常感谢。我实现的注释协议有一个名为locationId的额外实例变量。这个ID是唯一的,我知道哪个locationId应该用新的坐标更新。 我怎样才能轻松访问它?我可以删除注释: “注释locationId = 3999删除并添加新的坐标?” - 更好:“带有locationId = 3999的注释设置了新的坐标,并且如果该针”更新了位置“。 – Tim 2009-12-10 09:16:45

+0

啊,我忘了。我已经看过这个教程,但这不能帮助我,因为解决我的问题没有什么用处。 – Tim 2009-12-10 09:19:38

1

因为我现在正在做注释,所以我只做了一个快速测试。你会得到一个编译器警告,所以它可能不被支持。但它的工作。

创建自定义MKAnnotation类,您可以设置坐标属性是可写的:在任何事件然后

@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate; 

或间隔需要,改变坐标使用这样的事情:

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