ios - Swift MKMapView.setRegion 在 MKLocalSearch.Request 之后不起作用

标签 ios swift mapkit swiftui

我一直在开发一个应用程序,用用户附近的所有夜生活地点来注释 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的所有更新方法(removeAnnotationsaddAnnotationssetRegion)

顺便说一下

self.map.removeAnnotations(mapItemPlacemarks)
self.map.addAnnotations(mapItemPlacemarks)

您正在删除mapView中不存在的mapItemPlacemarks。这没有任何意义,但这不是你的问题。

关于ios - Swift MKMapView.setRegion 在 MKLocalSearch.Request 之后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59447797/

相关文章:

ios - 使用 IBDesignable UILabel 类时出现奇怪的问题

ios - 如何确认 ref.removeAllObservers() 已完成?

ios - UIImagePickerController didFinishPickingMediaWithInfo 在 64 位设备上未调用

ios - XCode 6 和 Swift 中的 MKOverlay 颜色不匹配

ios - MapKit的startMonitoringForRegion是否保存了区域的引用?

ios - 如何使用 Swift 语言将 Game Center 集成到 Xcode 6 中的 iOS 应用程序中?

swift - 用于简单下载队列的 GCD

ios - FCM 设备组与主题

ios - 属性字符串未正确采用 kern 值

ios - Watchkit 扩展时出错