在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)
}
}