gpt4 book ai didi

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

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

我正在使用 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/

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