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