2016-12-31 2 views
1

У меня есть приложение ann, которое позволит пользователям рисовать свои собственные геообъекты. Прямо сейчас, как он работает, пользователь рисует свою геофоруменность на экране, и приложение отслеживает, где они рисуют и сохраняя свой путь в CGMutablePath.Swift Преобразование CGMutablePath в MKPolygon

Мой вопрос в том, как я могу взять этот CGMutablePath и применить его к MKPolygon, так что пользовательский ручной геофенсизм может применяться в качестве наложения карты?

ответ

1

Прежде всего, необходимо использовать очки от прикосновений пользователя построить MKOverlay:

let coords = points.map({ CLLocationCoordinate2D(latitude: Double($0.x), longitude: Double($0.y)) }) 
let polygon = MKPolygon(coordinates: coords, count: coords.count) 

Вы, возможно, потребуется также учитывать текущий уровень масштабирования карты, чтобы убедиться, что преобразование между точками экран и lat/lng верны.

Далее вы можете добавить это наложение на карту:

mapView.add(overlay) 

Чтобы стиль наложения (изменить его цвет и т.д.), используйте MKMapViewDelegate метод:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { 
    let renderer = MKPolygonRenderer(overlay: overlay) 
    renderer.fillColor = UIColor.blue 
    return renderer 
} 
+0

Спасибо за это. У меня есть код, но он не работает. Я думаю, что это потому, что координаты от касаний пользователей должны быть преобразованы в фактические точки широты/долготы. Любая идея о том, как это сделать? –

+0

Вы можете использовать функцию 'конвертировать (_: toCoordinateFrom:)' 'MKMapView', которая должна сделать трюк! – nathan

+1

Да, круто. Спасибо, Натан, работал как шарм! –

0

Мой вопрос, как я могу взять эту CGMutablePath и применить его к MKPolygon

нет. Если у вас есть общий CGPath, используйте пользовательский MKOverlay вместе с MKOverlayPathRenderer.

+0

Я полностью не Понимаю. Не могли бы вы дать более подробную информацию или указать мне в правильном направлении? Я не знаком с созданием пользовательского MKOverlay, могу ли я передать свой CGPath в обычную MKOverlay? –

+0

Точно. Вот для чего предназначен заказчик MKOverlay. Вам нужен способ переноса пути к MKOverlayPathRenderer; ваш MKOverlay выполняет эту работу, потому что вы умно дали свойство пути. Таким образом, когда вы переходите к 'mapView (_: rendererFor:)', вы можете вытащить путь из MKOverlay и использовать его для установки пути MKOverlayPathRenderer. – matt

Смежные вопросы