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

首先需要在项目中导入MapKit

#import 

界面如下

iOS10新特性, 地图默认导航模式_第1张图片
01.png

获取' 终点位置'
02.png

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

03.png

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

iOS10新特性, 地图默认导航模式_第2张图片
04.png

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

iOS10新特性, 地图默认导航模式_第3张图片
05.png

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

iOS10新特性, 地图默认导航模式_第4张图片
06.png

设置launchOptions

iOS10新特性, 地图默认导航模式_第5张图片
07.png

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

iOS10新特性, 地图默认导航模式_第6张图片
08.png

源码

 - (IBAction)navigateClick:(id)sender {
    /**
     地图导航的实现思路:
     需要知道起点和终点位置
     
     终点位置的获取 --> 地理编码
     起点位置的获取 --> MKMapItem 有一个类方法可以直接获取用户当前位置
     */
    
    // 1. 创建地理编码对象
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    
    // 2. 实现地理编码方法
    [geocoder geocodeAddressString:self.addressTF.text completionHandler:^(NSArray * _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];
    }];
}

你可能感兴趣的:(iOS10新特性, 地图默认导航模式)