Le linee non vengono disegnate sulla vista di sovrapposizione
Domanda
Sto cercando di disegnare una linea retta tra due punti nella vista Overlay. Nel metodo MKoverlayView, penso che sto facendo correttamente ma non capisco perché non sta disegnando linee ...
Qualcuno sa perché?
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale
inContext:(CGContextRef)context
{
UIGraphicsPushContext(context);
MKMapRect theMapRect = [[self overlay] boundingMapRect];
CGRect theRect = [self rectForMapRect:theMapRect];
// Clip the context to the bounding rectangle.
CGContextAddRect(context, theRect);
CGContextClip(context);
CGPoint startP = {theMapRect.origin.x, theMapRect.origin.y};
CGPoint endP = {theMapRect.origin.x + theMapRect.size.width,
theMapRect.origin.y + theMapRect.size.height};
CGContextSetLineWidth(context, 3.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextBeginPath(context);
CGContextMoveToPoint(context, startP.x, startP.y);
CGContextAddLineToPoint(context, endP.x, endP.y);
CGContextStrokePath(context);
UIGraphicsPopContext();
}
.
Grazie per il tuo aiuto.
Soluzione
La linea viene disegnata usando startP
e endP
che sono valori CGPoint
ma vengono inizializzati utilizzando theMapRect
che contiene valori generacoli di MKMapPoint
.
Invece, inizializzarli utilizzando theRect
che si sta convertendo da theMapRect
usando rectForMapRect
.
Inoltre, per la larghezza della linea, è possibile scalarlo utilizzando la funzione MKRoadWidthAtZoomScale
.Altrimenti, una larghezza della linea fissa di 3.0
non sarà visibile a meno che non si sia ingrandito molto vicino.
Il codice cambiato sarà simile a questo:
CGPoint startP = {theRect.origin.x, theRect.origin.y};
CGPoint endP = {theRect.origin.x + theRect.size.width,
theRect.origin.y + theRect.size.height};
CGContextSetLineWidth(context, 3.0 * MKRoadWidthAtZoomScale(zoomScale));
.
Infine, invece di un MKOverlayView
personalizzato, perché non utilizzare un MKPolylineView
per evitare manualmente linee di disegno?