iOS地圖導(dǎo)航功能實(shí)現(xiàn)

最簡(jiǎn)單快捷的方法使用高德地圖uri格侯,高德地圖uri的具體使用可在高德地圖官方網(wǎng)站看啸罢,使用非常簡(jiǎn)單

簡(jiǎn)單貼下部分代碼

   NSString *urlStr = [NSString stringWithFormat:@"http://uri.amap.com/navigation?from=%f,%f,我的位置&to=%@,%@,%@&mode=car&policy=1&src=mypage&coordinate=gaode&callnative=0",self.currentLocation.coordinate.longitude,self.currentLocation.coordinate.latitude,model.lng,model.lat,model.swjg_mc];
    self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight-64)];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString encodeToPercentEscapeString: urlStr]]];
    [self.webView loadRequest:request];
    self.webView.delegate = self;
    [self.view addSubview:self.webView];
效果圖.png

這種實(shí)現(xiàn)方式柒室,點(diǎn)擊導(dǎo)航的時(shí)候可以設(shè)置直接跳轉(zhuǎn)到高德地圖履磨,但是如果用戶沒有安裝高德地圖的話蛉抓,就直接跳轉(zhuǎn)到App Store ,用戶體驗(yàn)不是很好
所以后來需求改成蹬耘,點(diǎn)擊了立即導(dǎo)航讓選擇使用本地已經(jīng)安裝的地圖

D6943629-6BA3-4D12-A048-C0D848E9A370.png

那么現(xiàn)在問題出現(xiàn)了芝雪,立即導(dǎo)航的按鈕是高德web頁面的方法,iOS 怎么監(jiān)聽事件呢综苔,于是就搜索了各種方法惩系,最后選擇通過UIWebView 的代理方法監(jiān)聽

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

webview 每次加載都會(huì)調(diào)用這個(gè)方法,可以通過request.url 來判斷用戶是否點(diǎn)擊了立即導(dǎo)航按鈕

代碼如下

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSURL *url = [request URL];

    BOOL returnValue = YES;
    if ([url.absoluteString containsString:@"iosamap"] || [url.absoluteString containsString:@"amapuri://route/plan/"]) {
        NSLog(@"點(diǎn)擊了導(dǎo)航======================%@",url.absoluteString);
        [self showSheetView];
       //注意不要直接  return NO;
        returnValue = NO;
    }
    if ([url.absoluteString containsString:@"wap.amap.com"]) {
        returnValue = NO;
    }
    return returnValue;
}

立即導(dǎo)航的點(diǎn)擊事件截取到之后如筛,然后堡牡,在通過[UIApplication sharedApplication] canOpenURL: 方法來判斷本地安裝了哪些地圖
高德地圖:iosamap://
百度地圖:baidumap://

高德,百度 杨刨,蘋果地圖的跳轉(zhuǎn)方法:本文中跳轉(zhuǎn)到地圖顯示效果是這樣的晤柄,需要傳入終點(diǎn)的經(jīng)緯度

91CC416BB73A4547583E3D6FD6DA6863.png
//高德地圖
- (void)openGaoDeMap{
    NSString *urlString = [[NSString stringWithFormat:@"iosamap://path?sourceApplication=applicationName&sid=BGVIS1&slat=%f&slon=%f&sname=我的位置&did=BGVIS2&dlat=%@&dlon=%@&dname=%@&dev=0&t=0",self.currentLocationLatitude,self.currentLocationLongitude,self.lat,self.lng,self.addressName] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *myLocationScheme = [NSURL URLWithString:urlString];
    if ([[UIDevice currentDevice].systemVersion integerValue] >= 10) { //iOS10以后,使用新API
        [[UIApplication sharedApplication] openURL:myLocationScheme options:@{} completionHandler:^(BOOL success) { NSLog(@"scheme調(diào)用結(jié)束"); }];
    } else { //iOS10以前,使用舊API
        [[UIApplication sharedApplication] openURL:myLocationScheme];
    }
    
}
//百度地圖
- (void)openBaiduMap {
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:BAIDUMAP]]) {
        NSString *urlString = [[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%@,%@|name:%@&mode=driving&coord_type=bd09&origin_region=%@&destination_region=%@",self.lat, self.lng,self.addressName,@"",@""]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:urlString]]) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
        } else {
            [ToolKit showAlertMessage:@"" currentVc:self];
        }
    }
}

//蘋果地圖
- (void)openAppleMap {
//出發(fā)點(diǎn)的經(jīng)緯度可以不傳,默認(rèn)是當(dāng)前位置
//終點(diǎn)的位置
    CLLocationCoordinate2D tolocation = CLLocationCoordinate2DMake(緯度, 經(jīng)度);
    MKMapItem *currentLocationItem = [MKMapItem mapItemForCurrentLocation];
    MKMapItem *toLocationItem = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:tolocation addressDictionary:@{}]];
    toLocationItem.name = self.addressName;
    [MKMapItem openMapsWithItems:@[currentLocationItem, toLocationItem]
                   launchOptions:@{MKLaunchOptionsDirectionsModeKey:
                    MKLaunchOptionsDirectionsModeDriving,MKLaunchOptionsShowsTrafficKey: [NSNumber numberWithBool:YES]}];
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妖胀,一起剝皮案震驚了整個(gè)濱河市芥颈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赚抡,老刑警劉巖爬坑,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異涂臣,居然都是意外死亡盾计,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來署辉,“玉大人族铆,你說我怎么就攤上這事】蕹ⅲ” “怎么了哥攘?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)刚夺。 經(jīng)常有香客問我献丑,道長(zhǎng),這世上最難降的妖魔是什么侠姑? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮箩做,結(jié)果婚禮上莽红,老公的妹妹穿的比我還像新娘。我一直安慰自己邦邦,他們只是感情好安吁,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著燃辖,像睡著了一般鬼店。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上黔龟,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天妇智,我揣著相機(jī)與錄音,去河邊找鬼氏身。 笑死巍棱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛋欣。 我是一名探鬼主播航徙,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼陷虎!你這毒婦竟也來了到踏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤尚猿,失蹤者是張志新(化名)和其女友劉穎窝稿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谊路,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讹躯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潮梯。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骗灶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秉馏,到底是詐尸還是另有隱情耙旦,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布萝究,位于F島的核電站免都,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏帆竹。R本人自食惡果不足惜绕娘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望栽连。 院中可真熱鬧险领,春花似錦、人聲如沸秒紧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熔恢。三九已至脐湾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叙淌,已是汗流浹背秤掌。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凿菩,地道東北人机杜。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像衅谷,于是被迫代替她去往敵國(guó)和親椒拗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫获黔、插件蚀苛、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,117評(píng)論 4 61
  • 磨耳朵閱讀 129評(píng)論 0 1
  • 字符屬性可以應(yīng)用于 attributed string 的文本中。 1. 設(shè)置Label首行縮進(jìn) 2. label...
    yaoyao_IOS閱讀 1,280評(píng)論 0 0
  • 在今年十月份玷氏,一家深圳餐廳的火爆吸引到了餐飲界眾多老司機(jī)們關(guān)注堵未,原因是這家餐廳直接刷新了行業(yè)的坪效記錄:一家餐廳的...
    題客說閱讀 1,509評(píng)論 0 1
  • 走不出這泥濘的路,我的腳已沾滿了泥垢盏触。 走不出這磅礴的雨渗蟹,我的頭已濕到了發(fā)髻块饺。 走不出這漆黑的夜,我的眼已迷離了方...
    靜若青蓮閱讀 395評(píng)論 6 7