如何将 Mapbox SDK 与 SwiftUI 集成
How to integrate Mapbox SDK with SwiftUI
我在我的项目中安装了 Mapbox SDK,但我不明白如何将此代码片段与 SwiftUI
集成。
我创建了一个名为 MapView
的 SwiftUI View
,我在其中导入了 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 开发的新手,如有任何帮助,我们将不胜感激。
这是一个关于如何将 MGLMapView
与 SwiftUI
集成的工作示例。
使用 UIViewRepresentable
时,您必须实现两个委托:makeUIView
将 return 您的视图(在本例中为 MGLMapView
)和 updateUIView
将收到与在 makeUIView
中编辑的 return 相同的视图类型(再次 MGLMapView
)。
你可以用它来做实验。
此外,我建议您熟悉 React 架构,以便更好地理解 SwiftUI 方法。
您可以通过使 ContentView
接收样式 URL 并在预览中尝试不同的样式来改进此示例。
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>) {
}
}
更新:这是关于如何将 Mapbox 与 SwiftUI 集成的官方指南 https://docs.mapbox.com/help/tutorials/ios-swiftui/
我在我的项目中安装了 Mapbox SDK,但我不明白如何将此代码片段与 SwiftUI
集成。
我创建了一个名为 MapView
的 SwiftUI View
,我在其中导入了 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 开发的新手,如有任何帮助,我们将不胜感激。
这是一个关于如何将 MGLMapView
与 SwiftUI
集成的工作示例。
使用 UIViewRepresentable
时,您必须实现两个委托:makeUIView
将 return 您的视图(在本例中为 MGLMapView
)和 updateUIView
将收到与在 makeUIView
中编辑的 return 相同的视图类型(再次 MGLMapView
)。
你可以用它来做实验。
此外,我建议您熟悉 React 架构,以便更好地理解 SwiftUI 方法。
您可以通过使 ContentView
接收样式 URL 并在预览中尝试不同的样式来改进此示例。
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>) {
}
}
更新:这是关于如何将 Mapbox 与 SwiftUI 集成的官方指南 https://docs.mapbox.com/help/tutorials/ios-swiftui/