您可以通過實現您自己的MKOverlayPathView子類來完成此操作,該子類在地圖矩形中繪製兩次路徑。一旦黑色變厚,另一種顏色再變薄一次。
我已經創建了一個簡單的MKPolylineView的替代方案,它可以讓你這麼做:ASPolylineView。
如果你想自己做,你需要實現兩種主要方法看起來是這樣的:
- (void)drawMapRect:(MKMapRect)mapRect
zoomScale:(MKZoomScale)zoomScale
inContext:(CGContextRef)context
{
UIColor *darker = [UIColor blackColor];
CGFloat baseWidth = self.lineWidth/zoomScale;
// draw the dark colour thicker
CGContextAddPath(context, self.path);
CGContextSetStrokeColorWithColor(context, darker.CGColor);
CGContextSetLineWidth(context, baseWidth * 1.5);
CGContextSetLineCap(context, self.lineCap);
CGContextStrokePath(context);
// now draw the stroke color with the regular width
CGContextAddPath(context, self.path);
CGContextSetStrokeColorWithColor(context, self.strokeColor.CGColor);
CGContextSetLineWidth(context, baseWidth);
CGContextSetLineCap(context, self.lineCap);
CGContextStrokePath(context);
[super drawMapRect:mapRect zoomScale:zoomScale inContext:context];
}
- (void)createPath
{
// turn the polyline into a path
CGMutablePathRef path = CGPathCreateMutable();
BOOL pathIsEmpty = YES;
for (int i = 0; i < self.polyline.pointCount; i++) {
CGPoint point = [self pointForMapPoint:self.polyline.points[i]];
if (pathIsEmpty) {
CGPathMoveToPoint(path, nil, point.x, point.y);
pathIsEmpty = NO;
} else {
CGPathAddLineToPoint(path, nil, point.x, point.y);
}
}
self.path = path;
}
不錯的主意,但計算多邊形的從邊界一組任意的路線座標相當複雜 – progrmr
一個基本的方法可能是在走廊的上部加上0.000001的緯度,然後在下部加上-0.000001,然後建立一個由上下兩部分組成的多邊形的走廊零件...只是一個想法... – yonel
這隻會在路線沿東/西方向運行時起作用。這些可以在任何方向上運行,因此多邊形需要基於每個線段的標題。邊需要與路線標題成直角,並使用[餘弦的球面法則]計算經緯度對的方向(http://stackoverflow.com/questions/6924742/valid-way-to-計算角度在2-cllocations/7352235#7352235)是一個昂貴的操作。 – progrmr