我一直在开发一个应用程序,用用户附近的所有夜生活地点来注释 MKMapView。我已经实现了一个由 SwiftUI 按钮调用的最近更新函数。基于 CLLocationManager.location 的最近更新工作正常,但在任何 MKLocalSearch 查询之后,setRegion 停止工作。它必须是 setRegion,因为仍然会打印正确的纬度/经度。我也知道这不是由于注释造成的,因为注释添加/删除部分被注释掉时会发生相同的错误。它可能与链接 searchRequest.region 和 map.region 有关吗? manager
是 CLLocationManager 实例,map
是 MapView
func recenter(){
print("Recenter called")
guard let center = manager.location?.coordinate else{
print("Could not get location for recenter")
return
}
let newRegion = MKCoordinateRegion(center: center, latitudinalMeters: 1000, longitudinalMeters: 1000)
print("\(center.latitude) and \(center.longitude)")
map.setRegion(newRegion, animated: true)
}
func queryAndAnnotate(){
let searchRequest = MKLocalSearch.Request()
searchRequest.naturalLanguageQuery = "nightlife"
searchRequest.region = map.region
let search = MKLocalSearch(request: searchRequest)
search.start{response, error in
guard let response = response else {
Alert(title:Text("Alert"), message: Text("Error: \(error?.localizedDescription ?? "Unknown Error")"))
return
}
var mapItemPlacemarks: [MKPointAnnotation] = []
self.barsList = []
for i in response.mapItems{
let x = MKPointAnnotation()
x.coordinate = i.placemark.coordinate
x.title = i.name
mapItemPlacemarks.append(x)
}
self.map.removeAnnotations(mapItemPlacemarks)
self.map.addAnnotations(mapItemPlacemarks)
}
}
最佳答案
MKLocalSearch.start
在后台任务中调用completionHandler。
在此处理程序中,您将在后台任务中更新您的 mapView 实例。
确保在主任务中调用mapView的所有更新方法(removeAnnotations
、addAnnotations
、setRegion
)
顺便说一下
self.map.removeAnnotations(mapItemPlacemarks)
self.map.addAnnotations(mapItemPlacemarks)
您正在删除mapView中不存在的mapItemPlacemarks。这没有任何意义,但这不是你的问题。
关于ios - Swift MKMapView.setRegion 在 MKLocalSearch.Request 之后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59447797/