ios - MKPolylineRenderer 产生锯齿状、不相等的路径

标签 ios ios7 mapkit mkoverlay mkpolyline

我正在使用 iOS 7 MapKit API 在显示 MKDirectionsRequest 生成的路径的 map 上生成 3D 相机移动。路径由 MKOverlayRenderer 渲染,如下所示:

-(void)showRoute:(MKDirectionsResponse *)response
{
for (MKRoute *route in response.routes)
 {
    [self.map
     addOverlay:route.polyline level:MKOverlayLevelAboveRoads];
 }
}

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id < MKOverlay >)overlay
{
 MKPolylineRenderer *renderer =
 [[MKPolylineRenderer alloc] initWithOverlay:overlay];
UIColor *mapOverlayColor = [UIColor colorWithRed:((float)22 / 255.0f) green:((float)126 / 255.0f) blue:((float)251 / 255.0f) alpha:0.8];
 renderer.strokeColor = mapOverlayColor;
 renderer.lineWidth = 13.0;
 return renderer;
}

除一个问题外,它运行良好。当我使用 MKMapCameras 缩放或平移路径时(如果没有它们,如果我只是作为用户这样做的话),路径是锯齿状的,如屏幕截图所示:

screen shot

我测试了切换到 MKOverlayLevelAboveLabels 是否会有所不同,但遗憾的是结果是一样的。

有人对如何改进渲染有什么建议吗?切换到测地线路径是否有影响?如果有,我将如何在此处实现?

最佳答案

子类 MKPolylineRenderer 并覆盖 applyStrokePropertiesToContext:atZoomScale: 以便它忽略比例,并以恒定宽度绘制线条:

@interface ConstantWidthPolylineRenderer : MKPolylineRenderer
@end

@implementation ConstantWidthPolylineRenderer

- (void)applyStrokePropertiesToContext:(CGContextRef)context
                           atZoomScale:(MKZoomScale)zoomScale
{
    [super applyStrokePropertiesToContext:context atZoomScale:zoomScale];
    CGContextSetLineWidth(context, self.lineWidth);
}

@end

现在使用它并欣赏它流畅的渲染:

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
    MKPolyline *polyline = (MKPolyline *)overlay;
    ConstantWidthPolylineRenderer *renderer = [[ConstantWidthPolylineRenderer alloc] initWithPolyline:polyline];
    renderer.strokeColor = [UIColor redColor];
    renderer.lineWidth = 40;
    return renderer;
}

关于ios - MKPolylineRenderer 产生锯齿状、不相等的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20601768/

相关文章:

ios - Swift 中的 MKTileoverlay 问题

ios - 在 Storyboard 中将 UIStackView 添加为空容器

iOS 7 视频未播放

ios - 尝试绘制图表时应用程序崩溃

html - 当存在 iOS 7 虚拟键盘时,Div 元素不会停留在底部

iOS7 弹出或通知持续几秒钟

ios - 如何向 MKMapView 添加宽半径注释?

ios - Swift Mapkit - 远离用户位置

iphone - 在iPhone中检查日期是否在两天之间

ios - 如何永久关闭我的登录 View ?