Как интегрировать Mapbox SDK с SwiftUI - PullRequest
2 голосов
/ 11 июня 2019

Я установил Mapbox SDK в свой проект, но я не понимаю, как интегрировать этот фрагмент кода с SwiftUI.

Я создал SwiftUI View с именем MapView, куда я импортируюMapbox Framework.

Я пытаюсь использовать протокол UIViewRepresentable, как в руководстве Apple, но безуспешно.

import Mapbox

class MapView: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()

    let styleURL = URL(string: "mapbox://styles/mapbox/outdoors-v9")
    let mapView = MGLMapView(frame: view.bounds,
                             styleURL: styleURL)
    mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

    mapView.setCenter(CLLocationCoordinate2D(latitude: 45.52954,
                                             longitude: -122.72317),
                      zoomLevel: 14, 
                      animated: false)
    view.addSubview(mapView)
  }

}

Я новичок в разработке для iOS, поэтому любая помощь будетвысоко ценится.

1 Ответ

3 голосов
/ 12 июня 2019

Это рабочий пример того, как вы можете интегрировать MGLMapView с SwiftUI.

. При использовании UIViewRepresentable вам нужно реализовать два делегата: makeUIView, которые будут возвращать ваше представление (вв этом случае MGLMapView) и updateUIView, которые получат тот же тип представления, что и тип, возвращенный в makeUIView (снова MGLMapView).

Вы можете использовать это для экспериментов.

Также я рекомендую вам ознакомиться с архитектурой React, чтобы лучше понять подход SwiftUI.

Вы можете улучшить этот пример, заставив ContentView получить styleURL и попробовав различные стили в предварительном просмотре..

import Mapbox
import SwiftUI

struct ContentView : View {
    var body: some View {

        MapboxViewRepresentation(MGLStyle.streetsStyleURL)

    }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

struct MapboxViewRepresentation : UIViewRepresentable {

    let styleURL: URL

    init(_ styleURL: URL) {
        self.styleURL = styleURL
    }

    func makeUIView(context: UIViewRepresentableContext<MapboxViewRepresentation>) -> MGLMapView {
        let mapView = MGLMapView(frame: .zero, styleURL: styleURL)

        return mapView
    }

    func updateUIView(_ uiView: MGLMapView, context: UIViewRepresentableContext<MapboxViewRepresentation>) {

    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...