gpt4 book ai didi

iphone - 如何自定义MKPolyLineView绘制不同风格的线条

转载 作者:技术小花猫 更新时间:2023-10-29 11:13:11 25 4
gpt4 key购买 nike

我想自定义在 MKMapView 上绘制的线条以显示路线,以便线条具有边框颜色和填充颜色。与此类似,它有一个黑色边框并填充了另一种颜色:

blue line with black border

我目前只是从 mapView:viewForOverlay: 返回 MKPolyLineView 对象,它适用于普通线条。文档说 MKPolyLineView 不能被子类化,所以我应该子类化 MKOverlayView 并实现我自己的 drawMapRect 吗?或者我应该继承 MKOverlayPathView 吗?或者创建 MKPolylineView 的替代品?

编辑 - 我要问的是:放置您自己的 Quartz 绘图代码以便绘制您自己的注释/叠加层的地方在哪里?目前我已经创建了 MKOverlayView 的子类并实现了我自己的 drawMapRect:zoomScale:inContext: 以这种方式绘制叠加层非常容易,但这是最好的解决方案吗?

最佳答案

您可以通过实现您自己的 MKOverlayPathView 子类来做到这一点,该子类在 map 矩形中绘制路径两次。一次用黑色变厚,一次用另一种颜色在上面变薄。

我已经创建了一个简单的 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;
}

关于iphone - 如何自定义MKPolyLineView绘制不同风格的线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7767580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com