SwiftUI on按钮点击调用MKMapView.setRegion
在SwiftUI on按钮点击调用MKMapView.setRegion,swiftui,Swiftui,在导航视图中我有一个按钮和一个MKMapView(称为MapView)。当用户点击按钮时,地图应缩放到用户的位置 我知道如何使用MKMapView.setRegion缩放到用户的位置,但我不知道如何正确地让MapView意识到当用户点击按钮时它应该执行此操作 如果我以某种方式引用了我的MapView对象,我可以调用setRegion,但我意识到这是必要的,现在当我学习SwiftUI时,我尝试以声明的方式思考 因此,我认为应该设置某种类型的状态变量,并使MapView侦听对该变量的更改。但如果我能
导航视图中
我有一个按钮
和一个MKMapView
(称为MapView
)。当用户点击按钮时,地图应缩放到用户的位置
我知道如何使用MKMapView.setRegion
缩放到用户的位置,但我不知道如何正确地让MapView
意识到当用户点击按钮时它应该执行此操作
如果我以某种方式引用了我的MapView
对象,我可以调用setRegion
,但我意识到这是必要的,现在当我学习SwiftUI时,我尝试以声明的方式思考
因此,我认为应该设置某种类型的状态
变量,并使MapView
侦听对该变量的更改。但如果我能做到这一点,那么无论如何调用setRegion
都是必要的
所以我在这里挠头。我该怎么办
struct ContentView:View{
@国家私有变量foo:Bool=false
var body:一些观点{
导航视图{
地图视图()
.navigationBarItems(尾部:
HStack{
按钮(操作:{
//缩放到用户的位置
self.foo.toggle()
}) {
图像(系统名称:“位置”)
}
})
}
}
}
结构映射视图:UIViewRepresentable{
@绑定变量foo:Bool
//如果更改了foo,则调用zoomToUserLocation()
func zoomToUserLocation(){
// ...
mapView.setRegion(区域,动画:true)
}
}
不清楚从何处获取区域(或设置),但在任何这样的绑定上,都会调用representable的updateUIView
,因此会在那里进行调用并使其异步,如下所示
func updateUIView(_ uiView: MKMapView, context: Context) {
// if needed make something conditional here on `foo`
self.zoomToUserLocation()
}
您可以使用UIViewRepresentable的updateUIView
方法。我会这样使用它:
struct MapView: UIViewRepresentable {
@Binding var foo: Bool
func updateUIView(_ uiView: MKMapView, context: Context) {
if foo {
self.zoomToUserLocation()
}
}
func zoomToUserLocation() {
// ...
mapView.setRegion(region, animated: true)
}
}
你也可以做一些有条件的事情,就像Asperi说的