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.

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top