Polyline at correct sizePolyline re-rendering too big
我在MKMap上放置了一条折线,放大后,平移操作将在一段时间内显示超大像素化折线,直到将其重新渲染为正确的大小为止。
其他SOF职位已为子类MKPolylineRenderer
提供了解决方案,并将其设置为静态大小。此解决方案意味着该线太小而无法在大地图上看到,或者对于小地图来说太大了]]
我已经尝试将其制作成实心折线,如果有任何改进,那就是微不足道。
我已经研究过func applyStrokeProperties(to: CGContext, atZoomScale: MKZoomScale)
以在每次缩放更改时调整整个折线的大小。创建CGContext被证明超出了我目前的技能水平,目前尚不清楚这样做是否会导致缩放带来性能问题
convenience init(polyline: MKPolyline) {
self.init(points: polyline.points(), count: polyline.pointCount)
}
@objc
func renderer() -> MKPolylineRenderer {
let polylineRenderer = MKPolylineRenderer(polyline: self)
polylineRenderer.lineWidth = 5
polylineRenderer.strokeColor = .black
polylineRenderer.lineDashPattern = [0, 10]
return polylineRenderer
}
}```
and implementation:
```- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {
// Return a KML renderer if there is one
MKOverlayRenderer *kmlRenderer = [SRMapViewController kmlRendererForKmlOverlay:overlay];
if (kmlRenderer) {
return kmlRenderer;
}
// Return a Route renderer if there is one
if ([overlay isKindOfClass:[RoutePolyline class]]) {
MKPolylineRenderer *renderer = [((RoutePolyline *)overlay) renderer];
return renderer;
}
// Return an MKPolyline if we have a UserLocation path
if ([overlay isKindOfClass:[MKPolyline class]]) {
MKPolylineRenderer *userLocationPathRenderer = [[MKPolylineRenderer alloc] initWithPolyline:overlay];
userLocationPathRenderer.lineWidth = USER_LOCATION_PATH_LINE_WIDTH;
UIColor *userColor = [self colorForUserLocationLine:overlay]; // color for the user of the UserLocation
userLocationPathRenderer.strokeColor = userColor;
return userLocationPathRenderer;
}
// find which area is being rendered and return the renderer for it
MKOverlayRenderer *renderer;
for (NSString *areaId in self.visibleAreaDict) {
MKPolygon *areaOverlay = [self overlayForAreaWithId:areaId];
if (overlay == areaOverlay) {
renderer = [self rendererForAreaWithId:areaId];
break;
}
}
NSAssert(renderer, @"ERROR: self.visibleAreaDict is missing a renderer for overlay %@! It should already be created before this method is called", overlay);
return renderer;
}```
Desired solutions:
- Hopefully an easy fix to speed up the re-render
- A good third party library for the polyline
- A work around to make the problem less visible
Undesired solutions:
- switch to Google Maps
Thanks!!
正确大小的折线折线重新渲染太大说明:我在MKMap上放置了一条折线,放大后,平移操作将在一段时间内显示超大像素化折线。