pro*_*rmr 9 iphone cocoa-touch overlay mkmapview ios
我想自定义在MKMapView上绘制的线条以显示路线,以便线条具有边框颜色和填充颜色.与此类似,它有一个黑色边框,并填充另一种颜色:

我目前只是返回MKPolyLineView对象,mapView:viewForOverlay:从中可以很好地处理普通线条.文档说MKPolyLineView不是子类,所以我应该继承MKOverlayView并实现我自己的drawMapRect?或者我应该继承MKOverlayPathView?或者创建MKPolylineView的替代品?
编辑 - 我要问的是:在哪里放置自己的Quartz绘图代码以绘制自己的注释/叠加?目前我已经创建了MKOverlayView的子类并实现了我自己的drawMapRect:zoomScale:inContext:以这种方式绘制叠加层非常容易,但这是最好的解决方案吗?
Adr*_*nig 12
您可以通过实现自己的MKOverlayPathView子类来完成此操作,该子类在map rect中绘制两次路径.一旦用黑色加厚,一次用更薄的颜色加上另一种颜色.
我已经创建了一个简单的直接替换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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6057 次 |
| 最近记录: |