2011-03-11 2 views
5

J'ai un MKOverlayView personnalisé, qui dessine une ligne simple. Dans drawMapRect: Je suis en train de régler CGContextSetLineWidth(context, 30); Cela semble très bien en zoom avant, mais lorsque vous effectuez un zoom arrière, la ligne devient de plus en plus mince. La référence MKOverlayView indique qu'elle est automatiquement mise à l'échelle au niveau de zoom de la carte. Comment puis-je le forcer à dessiner la même largeur quel que soit mon niveau de zoom? Je remarque que MKPolylineView (et MKPolygonView) le font correctement ... vous pouvez voir la largeur de la ligne redimensionner chaque fois que vous zoomez pour ajuster pour garder la même largeur. Comment puis-je faire cela dans mon overlayView?Custom MKOverlayView largeur de ligne

Répondre

14

Le résultat souhaité n'est pas clair. Voulez-vous que la largeur de ligne reste la même quel que soit le zoom ou voulez-vous que la ligne soit de la même largeur que les routes que dessine la carte, quel que soit le niveau de zoom?

Pour maintenir la largeur de ligne ne peu constante quelle que soit, essayez divisant par zoomScale:

CGContextSetLineWidth(context, (30/zoomScale)); 

Pour garder la ligne de la même largeur que les routes, utilisez MKRoadWidthAtZoomScale:

CGContextSetLineWidth(context, MKRoadWidthAtZoomScale(zoomScale)); 

Vous pourriez également appliquer une échelle supplémentaire à la largeur de la route si vous le souhaitez:

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

Je voulais la ligne consista Peu importe quoi. Je n'aurais jamais deviné que le fait de simplement diviser par le zoomscale ferait cela, ce qu'il a fait! Je savais que la largeur et le zoomscale devaient être inversement proportionnels, ce qui fait la division; mais je ne pensais pas que ce serait linéaire. – GendoIkari