【发布时间】:2020-05-04 17:35:58
【问题描述】:
在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)
}
}
【问题讨论】:
标签: swiftui