1

我有一个为 iOS < 6 构建的应用程序,在此之前所有功能都可以完美运行。现在我使用了一个开关来识别设备上安装的 iOS,然后我的应用程序打开正确的地图以获取从本地位置到另一个位置的方向(地图上的一些引脚)。问题是在 iOS 6 之前,应用程序会打开原生地图并向用户显示路线。现在,如果设备使用 iOS 6,该应用程序会打开 Apple 地图,但会显示一个弹出窗口,其中包含“无法在这 2 个位置之间获取方向”之类的内容。为什么?有人可以帮我解决这个问题吗?

在这里,我如何将坐标从显示按钮传递给地图:

- (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];


    }
4

2 回答 2

3

虽然您可以对地图 ( ) 使用 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];
于 2012-10-21T22:06:43.163 回答
0

只是为了澄清另一个答案,在指示时您有两种选择:开车或步行。以下是每一种方法:

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}];

来自Apple 文档的更多信息在这里。

于 2014-06-16T04:33:33.870 回答