2011-03-11 7 views
5

Tengo una MKOverlayView personalizada, que dibuja una línea simple. En drawMapRect: configuro CGContextSetLineWidth(context, 30); Esto se ve bien cuando se amplía por completo, pero cuando se aleja, la línea se vuelve más y más delgada. La referencia MKOverlayView dice que se escala automáticamente al nivel de zoom del mapa. ¿Cómo puedo forzarlo a dibujar el mismo ancho sin importar mi nivel de zoom? Noté que MKPolylineView (y MKPolygonView) hacen esto correctamente ... puedes ver el ancho de la línea cambiar de tamaño cada vez que acercas para ajustar para mantener el mismo ancho. ¿Cómo puedo hacer esto en mi overlayView?Anchura de línea MKOverlayView personalizada

Respuesta

14

No está claro el resultado que desea. ¿Desea que el ancho de línea permanezca igual independientemente del zoom o desea que la línea tenga el mismo ancho que las carreteras que dibuja la vista de mapa independientemente del nivel de zoom?

Para mantener la línea de anchura algo constante no importa qué, intente dividir por zoomScale:

CGContextSetLineWidth(context, (30/zoomScale)); 

Para mantener la línea de la misma anchura que las carreteras, utilice MKRoadWidthAtZoomScale:

CGContextSetLineWidth(context, MKRoadWidthAtZoomScale(zoomScale)); 

Usted podría también aplique una escala adicional al ancho de la carretera si lo desea:

CGContextSetLineWidth(context, 1.5*MKRoadWidthAtZoomScale(zoomScale)); 
+1

Yo quería la línea consista nt no importa qué. ¡Nunca hubiera adivinado que solo dividir por el zoomScale haría eso, y lo hizo! Sabía que el ancho y el zoomScale debían ser inversamente proporcionales, lo que hace la división; pero no pensé que sería lineal. – GendoIkari

Cuestiones relacionadas