MKMapItem openMapsWithItems调用系统的导航

本文介绍了如何利用iOS中的MKMapItem接口,调用系统内置的地图应用,实现从当前位置到指定目的地的导航功能。通过创建MKMapItem对象并设置起点和终点,可以无缝集成地图导航到自己的应用程序中,提供便捷的用户体验。




//
//  ViewController.m
//  UseSysNavgator
//
//  Created by hq on 16/5/18.
//  Copyright © 2016年 hanqing. All rights reserved.
//

#import "ViewController.h"
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>

@interface ViewController () <CLLocationManagerDelegate>

@property(nonatomic,strong) CLLocationManager *clm;

@property(nonatomic,strong) CLGeocoder *geo;

- (IBAction)startNav;


@end

@implementation ViewController

-(CLLocationManager *)clm{
 
    if (_clm==nil) {
        _clm=[[CLLocationManager alloc]init];
        _clm.delegate=self;
        
        if ([[UIDevice currentDevice].systemVersion floatValue]>=8.0) {
            [_clm requestAlwaysAuthorization];
        }
    }
    return _clm;
}

-(CLGeocoder *)geo{
    
    if (_geo==nil) {
        _geo=[[CLGeocoder alloc]init];
    }
    return _geo;
}

- (IBAction)startNav {
    
    [[self clm] requestLocation];
    
}

- (void)viewDidLoad {
    
    [super viewDidLoad];
    
}

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    
    CLLocation *loc=locations.firstObject;
    
    NSLog(@"获取用户位置");
    
    [self.geo reverseGeocodeLocation:loc completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        
        //用户当前的位置
        CLPlacemark *beginMark=placemarks.firstObject;
        
        MKPlacemark *mkBeginMark=[[MKPlacemark alloc]initWithPlacemark:beginMark];
        
        MKMapItem *beginItem=[[MKMapItem alloc]initWithPlacemark:mkBeginMark];
        
        [self.geo geocodeAddressString:@"上海" completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
           
            CLPlacemark *endMark=placemarks.firstObject;
            
            MKPlacemark *mkEndMark=[[MKPlacemark alloc]initWithPlacemark:endMark];
            
            MKMapItem *endItem=[[MKMapItem alloc]initWithPlacemark:mkEndMark];

            
            NSDictionary *dict=@{
                                 
                                 MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
                                 MKLaunchOptionsMapTypeKey:@(MKMapTypeHybrid),
                                 MKLaunchOptionsShowsTrafficKey:@(YES)
                                 
                                 };
            
            [MKMapItem openMapsWithItems:@[beginItem,endItem] launchOptions:dict];

        }];
        
    }];
}

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
    
    if (error) {
        NSLog(@"获取用户当前位置失败");
    }
}



- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    
}

@end



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值