Как я могу добавить MapView в другой вид в Swift? - PullRequest
0 голосов
/ 10 января 2020

В моем приложении 2 вкладки. На первом я отображаю View (это myView, самоопределенная структура), а на втором я хочу отобразить MapView. Я нашел несколько учебных пособий, показывающих, как добавить MapView через раскадровку, но я не понимаю, как наконец-то отобразить его на одной из моих вкладок. Вкладки создаются следующим образом:

struct ContentView: View {
    @State private var selection = 0

    var body: some View {
        TabView(selection: $selection){
            myView()
                .font(.title)
                .tabItem {
                    VStack {
                        Image(systemName: "list.dash")
                        Text("Events")
                    }
                }
                .tag(0)
            Text("MAP")//here I want the MapView
                .tabItem {
                    VStack {
                        Image(systemName: "map")
                        Text("Map")
                    }
                }
                .tag(1)
        }
    }
}

Я хочу вставить карту вместо теперь размещенного "Текст (" КАРТА ")".

1 Ответ

2 голосов
/ 10 января 2020

Вы можете использовать любые представления, которые ранее поддерживались в UIKit (или в данном случае MapKit) в SwiftUI, вам просто нужно предоставить класс моста, соответствующий UIViewRepresentable.

Я рекомендую взглянуть на предоставленные Apple учебники по адресу: https://developer.apple.com/tutorials/swiftui/tutorials

Вот пример класса, который делает то, что вы хотите:

import SwiftUI
import MapKit

struct MapView: UIViewRepresentable {
    var coordinate: CLLocationCoordinate2D

    func makeUIView(context: Context) -> MKMapView {
        MKMapView(frame: .zero)
    }

    func updateUIView(_ view: MKMapView, context: Context) {
        let span = MKCoordinateSpan(latitudeDelta: 0.02, longitudeDelta: 0.02)
        let region = MKCoordinateRegion(center: coordinate, span: span)
        view.setRegion(region, animated: true)
    }
}

Тогда, как вы видите выше, вы можете заменить Text("MAP") на MapView(coordinate: center-coordinate-here)

...