繪制導(dǎo)航路線
1. 理論支持
- 路線也是一個(gè)覆蓋層
- 在地圖上操作覆蓋層,其實(shí)操作的是覆蓋層的數(shù)據(jù)模型
1. 添加覆蓋層:在地圖上添加覆蓋層數(shù)據(jù)模型
2. 刪除覆蓋層:在地圖上移除覆蓋層數(shù)據(jù)模型
2. 添加導(dǎo)航路線到地圖
獲取幾何路線的數(shù)據(jù)模型 (id <MKOverlay>)overlay
-
地圖添加覆蓋層(幾何路線也是一個(gè)覆蓋層), 直接添加覆蓋層數(shù)據(jù)模型
[self.mapView addOverlay:overlay];
設(shè)置地圖代理, 代理遵循協(xié)議 MKMapViewDelegate
-
實(shí)現(xiàn)地圖添加覆蓋層數(shù)據(jù)模型時(shí), 回調(diào)的代理方法; 通過(guò)此方法, 返回對(duì)應(yīng)的渲染圖層
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay { // 創(chuàng)建折線渲染對(duì)象 if ([overlay isKindOfClass:[MKPolyline class]]) { MKPolylineRenderer *lineRenderer = [[MKPolylineRenderer alloc] initWithOverlay:overlay]; // 設(shè)置線寬 lineRenderer.lineWidth = 6; // 設(shè)置線顏色 lineRenderer.strokeColor = [UIColor redColor]; return lineRenderer; } }
3. 添加圓形覆蓋層到地圖
-
創(chuàng)建圓形區(qū)域覆蓋層的數(shù)據(jù)模型
MKCircle *circle = [MKCircle circleWithCenterCoordinate:self.mapView.centerCoordinate radius:1000000];
-
添加覆蓋層數(shù)據(jù)模型
[self.mapView addOverlay:circle];
-
實(shí)現(xiàn)代理方法
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay { // 創(chuàng)建圓形區(qū)域渲染對(duì)象 if ([overlay isKindOfClass:[MKCircle class]]) { MKCircleRenderer *circleRender = [[MKCircleRenderer alloc] initWithOverlay:overlay]; circleRender.fillColor = [UIColor cyanColor]; circleRender.alpha = 0.6; return circleRender; } return nil; }
### 4. 測(cè)試環(huán)境
1. 地圖加載需要聯(lián)網(wǎng)
2. XCode版本不限
3. iOS系統(tǒng)版本不限
### 5. 常見(jiàn)問(wèn)題總結(jié)
1. 東西太多, 記不住?
只需要記得一個(gè)思想, 按照MVC的原則, 我們操作覆蓋層, 就是操作覆蓋層數(shù)據(jù)模型; 然后地圖, 會(huì)調(diào)用其對(duì)應(yīng)的代理方法, 獲取對(duì)應(yīng)的覆蓋層渲染層;
類記不住沒(méi)關(guān)系, 主要記住大致思路就可以.
----