1,效果如

2,設(shè)置info.plist
info.plist下檢測是否設(shè)置平臺Scheme,對于需要配置的平臺,如果沒有配置,將無法正常跳轉(zhuǎn)平臺客戶端,因此需要配置Scheme名單。本文我們需要添加百度地圖和高德地圖的scheme白名單。
操作方法:在項目的info.plist中添加LSApplicationQueriesSchemes字段,類型是Array,然后添加兩個Item。
如圖:

3,代碼附上:如下
#pragma mark -- 設(shè)置導(dǎo)航
-(void)thridMapNavgationMath{
? ? //導(dǎo)航到某個地方
? ? self.navcoordinate = CLLocationCoordinate2DMake(39.3183, 116.9206);
? ? //系統(tǒng)版本高于8.0,使用UIAlertController
? ? if (IS_SystemVersionGreaterThanEight) {
? ? ? ? UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"導(dǎo)航到還車點" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
? ? ? ? NSMutableAttributedString *alertControllerStr = [[NSMutableAttributedString alloc] initWithString:@"導(dǎo)航到還車點"];
//設(shè)置字體顏色
? ? ? ? [alertControllerStr addAttribute:NSForegroundColorAttributeName value:BC_RGBColor(0x333333) range:NSMakeRange(0, 0)];
? ? ? ? [alertControllerStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:14] range:NSMakeRange(0, 0)];
? ? ? ? [alertController setValue:alertControllerStr forKey:@"attributedTitle"];
//? ? ? ? //自帶地圖
//? ? ? ? [alertController addAction:[UIAlertAction actionWithTitle:@"自帶地圖" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//
//? ? ? ? ? ? NSLog(@"alertController -- 自帶地圖");
//
//? ? ? ? ? ? //使用自帶地圖導(dǎo)航
//? ? ? ? ? ? MKMapItem *currentLocation =[MKMapItem mapItemForCurrentLocation];
//
//? ? ? ? ? ? MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:self.navcoordinate addressDictionary:nil]];
//
//? ? ? ? ? ? [MKMapItem openMapsWithItems:@[currentLocation,toLocation] launchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MKLaunchOptionsShowsTrafficKey:[NSNumber numberWithBool:YES]}];
//
//
//? ? ? ? }]];
? ? ? ? //判斷是否安裝了高德地圖,如果安裝了高德地圖,則使用高德地圖導(dǎo)航
? ? ? ? if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
? ? ? ? ? ? UIAlertAction *gaodeAction =[UIAlertAction actionWithTitle:@"高德地圖" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
? ? ? ? ? ? ? ? NSLog(@"alertController -- 高德地圖");
? ? ? ? ? ? ? ? NSString *urlsting =[[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &backScheme= &lat=%f&lon=%f&dev=0&style=2",self.navcoordinate.latitude,self.navcoordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
? ? ? ? ? ? ? ? [[UIApplication? sharedApplication]openURL:[NSURL URLWithString:urlsting]];
? ? ? ? ? ? }];
? ? ? ? ? ? [gaodeAction setValue:BC_RGBColor(0x32d2dc) forKey:@"titleTextColor"];
? ? ? ? ? ? [alertController addAction:gaodeAction];
//? ? ? ? ? ? [alertController addAction:[UIAlertAction actionWithTitle:@"高德地圖" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//
//? ? ? ? ? ? ? ? NSLog(@"alertController -- 高德地圖");
//? ? ? ? ? ? ? ? NSString *urlsting =[[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &backScheme= &lat=%f&lon=%f&dev=0&style=2",self.navcoordinate.latitude,self.navcoordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//? ? ? ? ? ? ? ? [[UIApplication? sharedApplication]openURL:[NSURL URLWithString:urlsting]];
//
//? ? ? ? ? ? }]];
? ? ? ? }
? ? ? ? //判斷是否安裝了百度地圖,如果安裝了百度地圖,則使用百度地圖導(dǎo)航
? ? ? ? if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
? ? ? ? ? ? UIAlertAction *baiduAction = [UIAlertAction actionWithTitle:@"百度地圖" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
? ? ? ? ? ? ? ? NSLog(@"alertController -- 百度地圖");
? ? ? ? ? ? ? ? NSString *urlsting =[[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",self.navcoordinate.latitude,self.navcoordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
? ? ? ? ? ? ? ? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
? ? ? ? ? ? }];
? ? ? ? ? ? [baiduAction setValue:BC_RGBColor(0x32d2dc) forKey:@"titleTextColor"];
? ? ? ? ? ? [alertController addAction:baiduAction];
//? ? ? ? ? ? [alertController addAction:[UIAlertAction actionWithTitle:@"百度地圖" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//
//? ? ? ? ? ? ? ? NSLog(@"alertController -- 百度地圖");
//? ? ? ? ? ? ? ? NSString *urlsting =[[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",self.navcoordinate.latitude,self.navcoordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//? ? ? ? ? ? ? ? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
//
//? ? ? ? ? ? }]];
? ? ? ? }
? ? ? ? //添加取消選項
? ? ? ? UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
? ? ? ? ? ? [alertController dismissViewControllerAnimated:YES completion:nil];
? ? ? ? }];
? ? ? ? [cancleAction setValue:BC_RGBColor(0x32d2dc) forKey:@"titleTextColor"];
? ? ? ? [alertController addAction:cancleAction];
//? ? ? ? [alertController addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
//
//? ? ? ? ? ? [alertController dismissViewControllerAnimated:YES completion:nil];
//
//? ? ? ? }]];
? ? ? ? //顯示alertController
? ? ? ? [self presentViewController:alertController animated:YES completion:nil];
? ? }
? ? else {? //系統(tǒng)版本低于8.0,則使用UIActionSheet
? ? ? ? UIActionSheet * actionsheet = [[UIActionSheet alloc] initWithTitle:@"導(dǎo)航到還車點" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"自帶地圖", nil];
? ? ? ? //如果安裝高德地圖,則添加高德地圖選項
? ? ? ? if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
? ? ? ? ? ? [actionsheet addButtonWithTitle:@"高德地圖"];
? ? ? ? }
? ? ? ? //如果安裝百度地圖,則添加百度地圖選項
? ? ? ? if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
? ? ? ? ? ? [actionsheet addButtonWithTitle:@"百度地圖"];
? ? ? ? }
? ? ? ? [actionsheet showInView:self.view];
? ? }
}
#pragma mark - UIActionSheetDelegate
- (void)actionSheetCancel:(UIActionSheet *)actionSheet
{
? ? NSLog(@"ActionSheet - 取消了");
? ? [actionSheet removeFromSuperview];
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
? ? NSLog(@"numberOfButtons == %ld",actionSheet.numberOfButtons);
? ? NSLog(@"buttonIndex == %ld",buttonIndex);
? ? if (buttonIndex == 0) {
? ? ? ? NSLog(@"自帶地圖觸發(fā)了");
? ? ? ? MKMapItem *currentLocation =[MKMapItem mapItemForCurrentLocation];
? ? ? ? MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:self.navcoordinate addressDictionary:nil]];
? ? ? ? [MKMapItem openMapsWithItems:@[currentLocation,toLocation] launchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MKLaunchOptionsShowsTrafficKey:[NSNumber numberWithBool:YES]}];
? ? }
? ? //既安裝了高德地圖,又安裝了百度地圖
? ? if (actionSheet.numberOfButtons == 4) {
? ? ? ? if (buttonIndex == 2) {
? ? ? ? ? ? NSLog(@"高德地圖觸發(fā)了");
? ? ? ? ? ? NSString *urlsting =[[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &backScheme= &lat=%f&lon=%f&dev=0&style=2",self.navcoordinate.latitude,self.navcoordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
? ? ? ? ? ? [[UIApplication? sharedApplication]openURL:[NSURL URLWithString:urlsting]];
? ? ? ? }
? ? ? ? if (buttonIndex == 3) {
? ? ? ? ? ? NSLog(@"百度地圖觸發(fā)了");
? ? ? ? ? ? NSString *urlsting =[[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",self.navcoordinate.latitude,self.navcoordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
? ? ? ? ? ? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
? ? ? ? }
? ? }
? ? //安裝了高德地圖或安裝了百度地圖
? ? if (actionSheet.numberOfButtons == 3) {
? ? ? ? if (buttonIndex == 2) {
? ? ? ? ? ? if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
? ? ? ? ? ? ? ? NSLog(@"只安裝的高德地圖觸發(fā)了");
? ? ? ? ? ? ? ? NSString *urlsting =[[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &backScheme= &lat=%f&lon=%f&dev=0&style=2",self.navcoordinate.latitude,self.navcoordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
? ? ? ? ? ? ? ? [[UIApplication? sharedApplication]openURL:[NSURL URLWithString:urlsting]];
? ? ? ? ? ? }
? ? ? ? ? ? if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
? ? ? ? ? ? ? ? NSLog(@"只安裝的百度地圖觸發(fā)了");
? ? ? ? ? ? ? ? NSString *urlsting =[[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",self.navcoordinate.latitude,self.navcoordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
? ? ? ? ? ? ? ? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
4:小結(jié):(1),自己項目沒用到自帶地圖導(dǎo)航,所以注釋掉了
? ? (2)調(diào)用自己地圖需注意添加#import<MapKit/MapKit.h>才能調(diào)用