2012-05-22 12 views
5

Sto provando a disegnare una linea retta tra due punti nella vista sovrapposizione. Nel metodo MKOverlayView, penso che sto facendo correttamente, ma non capisco il motivo per cui non è disegnare le linee ...non vengono disegnate nella vista sovrapposizione

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 vostro aiuto.

risposta

3

La linea viene disegnata utilizzando startP e endP che sono CGPoint valori ma sono inizializzati utilizzando theMapRect contenente MKMapPoint valori.

Invece, inizializzarli utilizzando theRect che si sta convertendo da theMapRect utilizzando rectForMapRect.

Inoltre, per la larghezza della linea, è possibile ridimensionarla utilizzando la funzione MKRoadWidthAtZoomScale. In caso contrario, una larghezza della linea fissa di 3.0 non sarà visibile a meno che non si sia effettuato uno zoom molto vicino.

Il codice modificato sarebbe simile a questa:

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, al posto di un costume MKOverlayView, perché non utilizzare un MKPolylineView per evitare di attirare le linee manualmente?

+0

Ha funzionato !! Grazie mille!!! –

+0

Ciao, ho ancora una domanda ... Se devo inizializzare CGPoint da boundingMapRect, come dovrei fare ???? –

+0

oh .. e il motivo per cui non sto utilizzando MkPolylineView è che devo disegnare una freccia non solo in linea retta ... –

Problemi correlati