В моем приложении есть карта, которая перемещается в соответствии с местоположением пользователя. Я успешно нарисовал полилинию для источника и пункта назначения. Используя следующий код
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id < MKOverlay >)overlay{
MKPolylineView *view1 = [[MKPolylineView alloc] initWithOverlay:overlay];
view1.lineWidth = 27.0;
view1.strokeColor = [UIColor colorWithRed:55.0/255.0 green:168.0/255.0 blue:219.0/255.0 alpha:1];
return view1;
}
Но моя проблема заключается в том, что когда карта движется, это означает, что я меняю область карты по мере перемещения пользователя, тогда иногда полилиния не отображается хорошо, иногда она отображается толще, чем фактический размер, как вы можете видеть на изображении ниже.
я прилагаю изображение ниже, пожалуйста, дайте мне знать, что я могу сделать для гладкой полилинии, когда карта движется.
ИЗМЕНИТЬ
Как предложил Мэтт, я создал подкласс MKPolylineRenderer и реализовал метод drawMapRect, как показано ниже:
-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context{
CGMutablePathRef fullPath = CGPathCreateMutable();
BOOL pathIsEmpty = YES;
//merging all the points as entire path
for (int i=0;i< self.polyline.pointCount;i++){
CGPoint point = [self pointForMapPoint:self.polyline.points[i]];
if (pathIsEmpty){
CGPathMoveToPoint(fullPath, nil, point.x, point.y);
pathIsEmpty = NO;
} else {
CGPathAddLineToPoint(fullPath, nil, point.x, point.y);
}
}
//get bounding box out of entire path.
CGRect pointsRect = CGPathGetBoundingBox(fullPath);
CGRect mapRectCG = [self rectForMapRect:mapRect];
//stop any drawing logic, cuz there is no path in current rect.
if (!CGRectIntersectsRect(pointsRect, mapRectCG))return;
UIColor *darker = [UIColor blackColor];
CGFloat baseWidth = 10 / 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, [UIColor redColor].CGColor);
CGContextSetLineWidth(context, baseWidth);
CGContextSetLineCap(context, self.lineCap);
CGContextStrokePath(context);
[super drawMapRect:mapRect zoomScale:zoomScale inContext:context];
}
Но та же проблема См. изображение ниже:
хорошо, я думаю, у меня проблема, моя полилиния добавляется один раз, но поскольку скорость пользователя я изменяю уровень масштабирования MKMapView, уровень масштабирования изменяется, но ширина полилинии не обновляется,
Итак, как я могу динамически изменить ширину линии mkpolyline??