我在修改 Breadcrumb 示例时遇到了一些不一致之处,以使 CrumbPathView 从 MKOverlayPathView 子类化(就像它应该的那样),而不是从 MKOverlayView 子类化。
麻烦的是,文档在说明如何实现这两个方面的差异方面受到限制。对于 MKOverlayPathView 的子类,建议使用:
- createPath
- applyStrokePropertiesToContext:atZoomScale:
- strokePath:inContext:
但这是代替drawMapRect,还是补充?如果加上它似乎没有多大意义,因为两者都将用于类似的实现。但是使用它而不是 drawMapRect,会使线条变得断断续续。
努力寻找任何现实世界的子类化 MKOverlayPathView 的例子......有什么意义吗?
更新 - 从 drawMapRect 修改代码,应该工作:
- (void)createPath
{
CrumbPath *crumbs = (CrumbPath *)(self.overlay);
CGMutablePathRef newPath = [self createPathForPoints:crumbs.points
pointCount:crumbs.pointCount];
if (newPath != nil) {
CGPathAddPath(newPath, NULL, self.path);
[self setPath:newPath];
}
CGPathRelease(newPath);
}
- (void)applyStrokePropertiesToContext:(CGContextRef)context atZoomScale:(MKZoomScale)zoomScale
{
CGContextSetStrokeColorWithColor(context, [[UIColor greenColor] CGColor]);
CGFloat lineWidth = MKRoadWidthAtZoomScale(zoomScale);
CGContextSetLineWidth(context, lineWidth);
CGContextSetLineJoin(context, kCGLineJoinRound);
CGContextSetLineCap(context, kCGLineCapRound);
}
- (void)strokePath:(CGPathRef)path inContext:(CGContextRef)context
{
CGContextAddPath(context, path);
CGContextStrokePath(context);
[self setPath:path];
}
这绘制了一条初始线,但无法继续该线......它没有添加路径。我已经确认 applyStrokePropertiesToContext 和 strokePath 在每个新位置都会被调用。
这是产生的虚线的屏幕截图(它为 createPath 绘制,但之后没有绘制):
这是 createPath 中包含 drawMapRect 时发生的“断断续续”路径的屏幕截图: