轻击按钮上的SwiftUI调用MKMapView.setRegion

时间:2020-05-04 17:35:58

标签: swiftui

NavigationView中,我有一个Button和一个MKMapView(称为MapView)。当用户点击按钮时,地图应缩放到用户所在的位置。

我知道如何利用MKMapView.setRegion缩放到用户的位置,但是我不知道如何使MapView知道在用户使用时应该执行此操作的正确方法点击按钮。

如果我以某种方式引用了我的MapView对象,则可以调用setRegion,但是我意识到这是必须的,现在当我学习SwiftUI时,我会尝试声明式地思考。

因此,我相信我应该设置某种类型的State变量,并使MapView监听对该变量的更改。但是,如果我能够做到这一点,那么无论如何MapView都必须致电setRegion

所以我在这里挠头。我该怎么办?

struct ContentView: View {

    @State private var foo: Bool = false

    var body: some View {
        NavigationView {
            MapView()
                .navigationBarItems(trailing:
                    HStack {
                        Button(action: {
                            // zoom to user's location
                            self.foo.toggle()
                        }) {
                            Image(systemName: "location")
                        }
                })
        }
    }
}

struct MapView: UIViewRepresentable {

    @Binding var foo: Bool

    // if foo is changed, then call zoomToUserLocation()

    func zoomToUserLocation() {
        // ...
        mapView.setRegion(region, animated: true)
    }
}

0 个答案:

没有答案