Ho una mappa nella mia app in cui si sta spostando in base alla posizione dell'utente. Ho disegnato correttamente una polilinea per l'origine e la destinazione. Utilizzando seguente codicemodifica dinamicamente larghezzaWpth of mkpolyline
- (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;
}
Ma il mio problema è quando la mappa è in movimento, significa che io sto cambiando regione della mappa come utente si sposta, poi alcuni momenti poligonale non è dimostrato una buona po 'di tempo il suo spettacolo più spesso di dimensioni reali, come si può vedere nell'immagine qui sotto.
sto allegando l'immagine qui sotto, per favore fatemi sapere cosa posso fare per polilinea liscia quando la mappa è in movimento.
EDIT
Come Matt mi ha suggerito di creare una sottoclasse di MKPolylineRenderer e implementare il metodo drawMapRect come di seguito:
-(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];
}
ma lo stesso problema Vedi sotto immagine :
ok, penso che ho avuto problemi, è aggiunto il mio polyline una volta, ma la velocità dell'utente i cambiare il livello di zoom della MKMapView, livello di zoom è cambiato, ma la larghezza della polilinea non è rinfrescare,
SO Come posso modificare la riga della larghezza di mkpolyline in ??
Stesso problema in iOS 10 utilizzando MKPolylineRenderer. Hai trovato una soluzione per questo? –
Ho riscontrato lo stesso problema e non ho ancora trovato alcuna soluzione. – Kumar
Anche io sto affrontando lo stesso problema, qualsiasi soluzione si accorga di gestire la larghezza della polilinea a seconda dello zoom in o dello zoom out @Kumar –