在 Objective-C 中从第三方应用程序中移交给 Apple Maps 应用程序
Posted
技术标签:
【中文标题】在 Objective-C 中从第三方应用程序中移交给 Apple Maps 应用程序【英文标题】:Handing off to Apple Maps Application from Within Third-Party App in Objective-C 【发布时间】:2014-11-20 12:07:41 【问题描述】:有谁知道是否可以从第三方应用程序中调用 ios 8 设备上的本机 Apple Maps 应用程序并传入用户的Current Location
(如果他们允许)以及目的地Latitude and Longitude
允许地图应用程序绘制路线?
我有一个相对简单的应用程序,它显示了一个MKMapView
,上面标有本地区域的各个位置。点击其中一个会显示一个注释,这反过来又允许向模态视图显示有关该场所的更多信息。我有一个“获取方向”选项,我想简单地捕获用户的位置并打开地图应用程序,其中包含从他们的位置计算到他们选择的场所的路线,而无需自己在这应用程序 - 没有处理 UI、错误、路由等的预算(只是认为如果它可以像移交给地图应用程序一样简单地完成,那将是一个很好的功能)。
任何帮助或建议表示赞赏。
【问题讨论】:
【参考方案1】:是的,这很可能、简单且有据可查。看看 MKMapItem 类和方法openMapsWithItems:launchOptions:
方法。如果您正确设置选项,它将显示行车路线。
【讨论】:
【参考方案2】:感谢@Duncan C 为我指明了正确的方向。您实际上可以使用 URL 方案调用地图应用程序并传入一些参数,但也可以通过 Duncan 给出的点数来实现。这是我最终得到的完整代码,可以完全按照我的要求进行操作。
// Check to see if we can use Maps app.
// Pass an MKMapItem (destination) in along with Current Location
// Specify what kind of directions we want (driving, Walking etc).
// Invoke the Maps app.
Class mapItemClass = [MKMapItem class];
if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)])
// An MKMapItem which we will pass to Maps app.
// I'm using properties from my Shop object.
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(_shop.coordinate.latitude, _shop.coordinate.longitude);
MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil];
MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
[mapItem setName:[NSString stringWithFormat:@"Branch Name: %@", _shop.branch.name]];
// Set the directions mode to "Driving"
NSDictionary *launchOptions = @MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving;
// Get the "Current User Location" MKMapItem
MKMapItem *currentLocationMapItem = [MKMapItem mapItemForCurrentLocation];
// Pass the current location and destination map items to the Maps app
[MKMapItem openMapsWithItems:@[currentLocationMapItem, mapItem] launchOptions:launchOptions];
else
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Directions Error"
message:@"Sorry, we've encountered a problem meaning we're unable to provide you with directions at the moment.\n\nPlease use the Call Branch or Text Branch options to get in touch with a representative."
delegate:self
cancelButtonTitle:@"Dmiss"
otherButtonTitles:nil];
[alert show];
【讨论】:
用于阅读文档和完成工作以及发布代码以造福他人的道具。 (已投票。)我担心我会得到“你能发布代码吗”(也就是为我做这项工作)对我的回答的回应。是的,您也可以使用 URL 方案来实现,但是 MKMapItem 更简洁并提供更多控制。 我从不要求邓肯的完整代码。没有任何好处;这一切都是为了找到正确的地方找到你需要的东西。只是需要你朝正确的方向轻推。再次感谢。以上是关于在 Objective-C 中从第三方应用程序中移交给 Apple Maps 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
在 XCode 中从 Objective-C 访问 JavaScript 变量
我需要在 iOS 应用程序中从 SpriteKit GameViewController 转换为常规视图控制器(Objective-C)
如何在ios的objective-c中从设备中选择任何文档文件