iOS10新特性, 地图默认导航模式

首先需要在项目中导入MapKit

#import <MapKit/MapKit.h>

界面如下

01.png

获取'终点位置'
02.png

获取 ‘起点位置’, 进入MKMapItem.h文件可以看到有一个类方法(mapItemForCurrentLocation)直接获取用户当前位置, 注: 模拟器当中无法获取真实地址的, 需要在模拟器菜单点击Debug -> Location -> Custom Location设置

03.png

设置'起点位置'和'终点位置', launchOptions参数先设置nil, 调用系统自带的 地图app 进行导航,

04.png

此时运行程序, 需要手动点击'目的地'才会去规划路线

05.png

再次进入MKMapItem.h文件, 可以看到iOS10新增了一个导航模式:
MKLaunchOptionsDirectionsModeDefault

06.png

设置launchOptions

07.png

再次运行程序, 输入'目的地', 点击'开始导航', 系统调用自带地图时就会会选择最优路线

08.png

源码

 - (IBAction)navigateClick:(id)sender {
    /**
     地图导航的实现思路:
     需要知道起点和终点位置
     
     终点位置的获取 --> 地理编码
     起点位置的获取 --> MKMapItem 有一个类方法可以直接获取用户当前位置
     */
    
    // 1. 创建地理编码对象
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    
    // 2. 实现地理编码方法
    [geocoder geocodeAddressString:self.addressTF.text completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        
        // 3. 获取最后一个地标对象 --> 创建MKPlacemark对象
        MKPlacemark *mkPlacemark = [[MKPlacemark alloc] initWithPlacemark:placemarks.lastObject];
        
        // 4. 根据MKPlacemark对象来创建目的地所在的MKMapItem对象
        MKMapItem *destinationItem = [[MKMapItem alloc] initWithPlacemark:mkPlacemark];
        
        // 5. 获取起点位置
        MKMapItem *sourceItem = [MKMapItem mapItemForCurrentLocation];
        
        // 6. 调用open方法, 打开系统自带地图进行导航
        // MKMapItem: 表示地图上的一个点的对象
        NSDictionary *launchOptions = @{MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDefault};
        [MKMapItem openMapsWithItems:@[sourceItem, destinationItem] launchOptions:launchOptions];
    }];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容