2012-05-22 13 views
5

Estoy tratando de dibujar una línea recta entre dos puntos en la vista de superposición. En el método MKOverlayView, creo que estoy haciendo correctamente, pero no entiendo por qué no está dibujando ninguna línea ...líneas no se dibujan en la vista de superposición

¿Alguien sabe por qué?

- (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(); 
} 

Gracias por su ayuda.

Respuesta

3

La línea se dibuja usando startP y endP que son CGPoint valores pero están inicializa utilizando theMapRect que contiene MKMapPoint valores.

En su lugar, inicialícelos usando theRect, que está convirtiendo de theMapRect usando rectForMapRect.

Además, para el ancho de línea, es posible que desee escalar utilizando la función MKRoadWidthAtZoomScale. De lo contrario, un ancho de línea fijo de 3.0 no será visible a menos que se acerque demasiado.

El código modificado se vería así:

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)); 


Finalmente, en lugar de una costumbre MKOverlayView, ¿por qué no usar un MKPolylineView para evitar el trazado de líneas de forma manual?

+0

¡Funcionó! ¡¡¡Muchas gracias!!! –

+0

Hola, tengo una pregunta más ... Si debo inicializar CGPoint desde boundingMapRect, ¿cómo debería hacerlo ???? –

+0

oh .. y la razón por la que no estoy usando MkPolylineView es que necesito dibujar una flecha no solo en línea recta ... –

Cuestiones relacionadas