美文网首页iOS开发程序员
iOS 调用本地导航

iOS 调用本地导航

作者: KorsJJ | 来源:发表于2018-02-28 10:57 被阅读0次

    提示:文章只是用来记录本人自己在学习过程中所遇到的一些问题的解决方案,如果有什么意见可以留言提出来,不喜勿喷哦!

    • 头文件继承 UIActionSheetDelegate 协议
    • 导入两个系统库文件分别是MapKit.framework,CoreLocation.framework
      info.plist 文件中添加:
    <key>LSApplicationQueriesSchemes</key>
        <array>
            <string>baidumap</string>
            <string>iosamap</string>
            <string>comgooglemaps</string>
        </array>
    
    - (void)navigationClick{
        //系统版本高于8.0,使用UIAlertController
        if (IS_SystemVersionGreaterThanEight) {
            
            UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"导航到设备" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
            //自带地图
            [alertController addAction:[UIAlertAction actionWithTitle:@"iOS地图" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                
                NSLog(@"alertController -- 自带地图");
                
                //使用自带地图导航
                MKMapItem *currentLocation =[MKMapItem mapItemForCurrentLocation];
                
                MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:self.desCoordinate addressDictionary:nil]];
                
                [MKMapItem openMapsWithItems:@[currentLocation,toLocation] launchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
                                                                                           MKLaunchOptionsShowsTrafficKey:[NSNumber numberWithBool:YES]}];
                
                
            }]];
            
            //判断是否安装了高德地图,如果安装了高德地图,则使用高德地图导航
            if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
                
                [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.desCoordinate.latitude,self.desCoordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
                    [[UIApplication  sharedApplication]openURL:[NSURL URLWithString:urlsting]];
                    
                }]];
            }
            
            //判断是否安装了百度地图,如果安装了百度地图,则使用百度地图导航
            if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
                [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.desCoordinate.latitude,self.desCoordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
                    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
                    
                }]];
            }
            
            //添加取消选项
            [alertController addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
                
                [alertController dismissViewControllerAnimated:YES completion:nil];
                
            }]];
            
            //显示alertController
            [self presentViewController:alertController animated:YES completion:nil];
            
        }
        else {  //系统版本低于8.0,则使用UIActionSheet
            
            UIActionSheet * actionsheet = [[UIActionSheet alloc] initWithTitle:@"导航到设备" 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(@"自带地图触发了");
            
            MKMapItem *currentLocation =[MKMapItem mapItemForCurrentLocation];
            
            MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:self.desCoordinate addressDictionary:nil]];
            
            [MKMapItem openMapsWithItems:@[currentLocation,toLocation] launchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
                                                                                       MKLaunchOptionsShowsTrafficKey:[NSNumber numberWithBool:YES]}];
            
        }
        //既安装了高德地图,又安装了百度地图
        if (actionSheet.numberOfButtons == 4) {
            
            if (buttonIndex == 2) {
                
                NSLog(@"高德地图触发了");
                
                NSString *urlsting =[[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &backScheme= &lat=%f&lon=%f&dev=0&style=2",self.desCoordinate.latitude,self.desCoordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
                [[UIApplication  sharedApplication]openURL:[NSURL URLWithString:urlsting]];
            }
            if (buttonIndex == 3) {
                
                NSLog(@"百度地图触发了");
                NSString *urlsting =[[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",self.desCoordinate.latitude,self.desCoordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
            }
            
        }
        //安装了高德地图或安装了百度地图
        if (actionSheet.numberOfButtons == 3) {
            
            if (buttonIndex == 2) {
                
                if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
                    
                    NSLog(@"只安装的高德地图触发了");
                    NSString *urlsting =[[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &backScheme= &lat=%f&lon=%f&dev=0&style=2",self.desCoordinate.latitude,self.desCoordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
                    [[UIApplication  sharedApplication]openURL:[NSURL URLWithString:urlsting]];
                    
                }
                if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
                    NSLog(@"只安装的百度地图触发了");
                    NSString *urlsting =[[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",self.desCoordinate.latitude,self.desCoordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
                    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
                }
                
                
            }
            
        }
        
    }
    

    其中 self.desCoordinate 表示目的地的坐标,需自行修改

    相关文章

      网友评论

        本文标题:iOS 调用本地导航

        本文链接:https://www.haomeiwen.com/subject/cklbxftx.html