MKPolyline нарушается при использовании типа satelliteFlyover? - PullRequest
0 голосов
/ 16 февраля 2020

Я хотел бы нарисовать немного Geodesi c Полилинии (линия большого круга) между точками на Земле, используя тип карты Спутникового эстакады.

// in viewDidLoad()

mapView.mapType = .satelliteFlyover
let geodesic = MKGeodesicPolyline(coordinates: [route.airport1, route.airport2], count: 2)
self.mapView.addOverlay(geodesic)

// rendering method
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        guard let polyline = overlay as? MKPolyline else {
            print("else??")
            return MKOverlayRenderer(overlay: overlay)
        }
        let renderer = MKPolylineRenderer.init(polyline: polyline)
        renderer.lineWidth = 1
        renderer.strokeColor = .systemTeal
        return renderer
    }

Я могу создать GeodesicPolyline частично, но линии не завершены.

Если я нахожусь в iOS системном темном режиме, строка отображается под «ночной зоной». dark mode

В то время как линия отображается под «дневной зоной», если темный режим отключен. bright mode

Я также пытался использовать

self.mapView.addOverlay(geodesic, level: .aboveLabels)
self.mapView.addOverlay(geodesic, level: .aboveRoads)

, но также не помог. Любой тип карты, кроме SatelliteFlyover или HybridFlyover, работает хорошо. Я нашел аналогичные топи c, но решения пока нет.

1 Ответ

0 голосов
/ 01 апреля 2020

У меня была похожая проблема, и я обнаружил, что MKMultiPolylineRenderer в iOS 13 намного лучше для обработки полилиний на эстакаде MapType. Вам нужно подготовить все ваши полилинии в массиве, чтобы у вас были ВСЕ полилинии:

var multiArray = [MKPolyline]()
// CREATE ALL OF YOUR POLYLINES AND APPEND THEM TO multiArray
view.addOverlay(MKMultiPolyline(multiArray))

Затем вам нужно создать раздел кода для обработки MKMultiPolylines в func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer. Я буквально скопировал свой раздел MKPolyline и просто изменил любую ссылку с MKPolyline на MKMultiPolyline.

ИДК, что делать, если вы не можете изменить цель на iOS 13. Оба типа карт эстакады демонстрируют аналогичную ситуацию до iOS 13. Должен отметить, что я не использую темный режим в мое приложение, поэтому я не уверен, что вы увидите те же результаты, что и я. Но этот код исправил все мои проблемы с ломаной / отсутствующей полилинией.

...