我已经为iOS&lt构建了一个应用程序;6,在所有功能之前,所有功能都可以完美地工作。现在,我使用了一个开关,该开关识别设备上安装的iOS,然后我的应用程序打开正确的地图,以获取从本地位置到另一个位置的说明(地图上的一些引脚)。问题在于,在iOS 6之前,该应用程序打开本机地图并将路由显示给用户。现在,如果设备使用iOS 6,则该应用程序将打开Apple Maps,但显示了一个弹出窗口,其中诸如"无法在这两个位置之间取得方向"之类的内容。为什么?有人可以帮助我解决这个问题吗?
在这里如何将坐标传递给披露按钮的地图:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
[self.navigationController pushViewController:[[UIViewController alloc] init] animated:YES];
if (SYSTEM_VERSION_LESS_THAN(@"6.0")) {
NSString* addr = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", view.annotation.coordinate.latitude,view.annotation.coordinate.longitude];
NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];
}
else {
NSString* addr = [NSString stringWithFormat:@"http://maps.apple.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", view.annotation.coordinate.latitude,view.annotation.coordinate.longitude];
NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];
}
虽然您可以将URL方法用于地图(http://maps.apple.com/...
),但在呈现特定位置时,我发现它并不好。最好的选择是在iOS 6及以上使用MAPKIT对象。
示例:
CLLocationCoordinate2D location;
location.latitude = ...;
location.longtitude = ...;
MKPlacemark* placemark = [[MKPlacemark alloc] initWithCoordinate:location addressDictionary:nil];
MKMapItem* item = [[MKMapItem alloc] initWithPlacemark:placemark];
//... Any Item customizations
NSDictionary* mapLaunchOptions = ...;
[item openInMapsWithLaunchOptions:mapLaunchOptions];
这将直接打开Apple地图,并使用您提供的物品。
为了处理指示,请使用MKLaunchOptionsDirectionsModeKey
启动选项,并通过以下方式提供开始和结束的地图项目:
[MKMapItem openMapsWithItems:mapItems launchOptions:launchOptions];
只是为了澄清其他答案,提供指示时有两个选择:驾驶或行走。这是每一个做的方法:
MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:CLLocationCoordinate2DMake(coordinate.latitude,coordinate.longitude) addressDictionary:nil];
MKMapItem *destination = [[MKMapItem alloc] initWithPlacemark:placemark];
//This is for driving
[MKMapItem openMapsWithItems:@[destination] launchOptions:@{MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving}];
//This is for walking
[MKMapItem openMapsWithItems:@[destination] launchOptions:@{MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeWalking}];
苹果文档的更多信息。