Пользовательская ширина линии MKOverlayView - PullRequest
5 голосов
/ 11 марта 2011

У меня есть собственный MKOverlayView, который рисует простую линию. В drawMapRect: Я устанавливаю CGContextSetLineWidth(context, 30); Это выглядит нормально при полном увеличении, но когда вы уменьшаете масштаб, линия становится все более и более тонкой. Ссылка MKOverlayView говорит, что она автоматически масштабируется до уровня масштабирования карты. Как я могу заставить его нарисовать одинаковую ширину независимо от моего уровня масштабирования? Я заметил, что MKPolylineView (и MKPolygonView) делают это правильно ... вы можете видеть изменение ширины линии всякий раз, когда вы увеличиваете масштаб, чтобы настроить, чтобы сохранить ту же ширину. Как я могу сделать это в моем overlayView?

1 Ответ

14 голосов
/ 11 марта 2011

Не ясно, какой результат вы хотите. Хотите ли вы, чтобы ширина линии оставалась одинаковой независимо от масштаба, или вы хотите, чтобы линия была такой же ширины, как и дороги, которые рисует вид карты независимо от уровня масштабирования?

Чтобы сохранить ширину линии несколько постоянной, попробуйте разделить на zoomScale:

CGContextSetLineWidth(context, (30/zoomScale));

Чтобы ширина линии была такой же, как у дорог, используйте MKRoadWidthAtZoomScale:

CGContextSetLineWidth(context, MKRoadWidthAtZoomScale(zoomScale));

Вы также можете применить дополнительное масштабирование к ширине дороги, если хотите:

CGContextSetLineWidth(context, 1.5*MKRoadWidthAtZoomScale(zoomScale));
...