(八十一)利用系统自带App来实现导航

利用系统的地图App进行导航,只需要传入起点和终点、启动参数,调用MKMapItem的类方法openMapWithItems:launchOptions:来实现定位,调用此方法后会打开系统的地图App。

下面我们来看看这个方法:

+ (BOOL)openMapsWithItems:(NSArray *)mapItems launchOptions:(NSDictionary *)launchOptions;①第一个参数是一个MapItem数组,每个MapItem中可以包含一个地标,用两个MapItem,一个作起点,一个作终点。

可以利用MKPlacemark初始化,而MKPlacemark可以利用CLPlacemark初始化,要得到CLPlacemark,可以利用CLGeocoder对象对地名进行地理编码得到。

②第二个参数是一个字典,字典中的键和值都可以通过手册查到,值可以使用之前设置地图属性时的值,注意非对象需要包装。

下面的代码演示了通过两个TextField输入起点和终点的地名,通过点击开始定位按钮实现打开系统自带地图App进行定位。

注意block是回调方法,为了保证顺序获取起点终点的地标,要在第一个block内写第二个block代码。

#import "ViewController.h"#import <MapKit/MapKit.h>@interface ViewController ()@property (weak, nonatomic) IBOutlet UITextField *startView;@property (weak, nonatomic) IBOutlet UITextField *endView;@property (strong, nonatomic) CLGeocoder *gcoder;@property (strong, nonatomic) CLPlacemark *startMrk,*endMrk;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];_gcoder = [[CLGeocoder alloc] init];}- (IBAction)startGeo:(id)sender {NSString *startStr = _startView.text;NSString *endStr = _endView.text;[_gcoder geocodeAddressString:startStr completionHandler:^(NSArray *placemarks, NSError *error) {if (!placemarks.count) return;_startMrk = [placemarks firstObject];[_gcoder geocodeAddressString:endStr completionHandler:^(NSArray *placemarks, NSError *error) {if (!placemarks.count) return;_endMrk = [placemarks firstObject];[self startNavigation];}];}];}- (void)startNavigation{MKPlacemark *startMrk = [[MKPlacemark alloc] initWithPlacemark:_startMrk];MKPlacemark *endMrk = [[MKPlacemark alloc] initWithPlacemark:_endMrk];MKMapItem *startItem = [[MKMapItem alloc] initWithPlacemark:startMrk];MKMapItem *endItem = [[MKMapItem alloc] initWithPlacemark:endMrk];NSArray *items = @[startItem,endItem];NSMutableDictionary *options = [NSMutableDictionary dictionary];/*启动参数的keyNSString * const MKLaunchOptionsDirectionsModeKey;NSString * const MKLaunchOptionsMapTypeKey;NSString * const MKLaunchOptionsMapCenterKey;NSString * const MKLaunchOptionsMapSpanKey;NSString * const MKLaunchOptionsShowsTrafficKey;NSString * const MKLaunchOptionsCameraKey一般键值也是常量字符串,,有些是结构体需要用@包装*/options[MKLaunchOptionsDirectionsModeKey] = MKLaunchOptionsDirectionsModeDriving;options[MKLaunchOptionsMapTypeKey] = @(MKMapTypeStandard);[MKMapItem openMapsWithItems:items launchOptions:options];}@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

我爱你….为了你的幸福,我愿意放弃一切—包括你。

(八十一)利用系统自带App来实现导航

相关文章:

你感兴趣的文章:

标签云: