swift - 延迟添加注释直到搜索完成
问题描述
所以我搜索并找到了多篇关于创建唯一注释和引脚的文章,但我认为我缺少一些更基本的东西,可能使用 MKMapViewDelegate 下的 annotationView 函数。
首先,我对 Swift 编程非常陌生,所以如果这是显而易见的事情,请提前道歉。本质上,我有一个 mapView,它通过放大动画找到用户位置。然后我有一个按钮,它将按钮标题传递给 MKLocalSearch 和一个 for/in 循环,它创建我的注释并将它们添加到我的地图视图中。问题是第一次单击我的按钮时没有添加注释,我必须再次单击才能显示注释。
我已经尝试过 DispatchQueue.main.async 并尝试在此循环上设置延迟执行以允许响应完成以进行处理,这是我的 viewController 顶部的相关部分(我只包含了相关代码,我的 CLLocationManagerDelegate 有一个扩展,它可以正常工作,如前所述):
import UIKit
import CoreLocation
import MapKit
class MapViewController: UIViewController, MKMapViewDelegate {
var weatherManager = WeatherManager()
let locationManager = CLLocationManager()
let request = MKLocalSearch.Request()
var localSearch: MKLocalSearch?
@IBOutlet weak var tempLabel: UILabel!
@IBOutlet weak var mapView: MKMapView!
@IBOutlet weak var conditionImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.requestLocation()
weatherManager.delegate = self
}
@IBAction func foodPressed(_ sender: UIButton) {
let allAnnotations = mapView.annotations
mapView.removeAnnotations(allAnnotations)
findPlace(place: (sender.titleLabel?.text)!)
}
func findPlace(place: String) {
localSearch = MKLocalSearch(request: request)
request.naturalLanguageQuery = place
request.region = mapView.region
self.localSearch?.start { (searchResponse, _) in
guard let response = searchResponse else {
return
}
for mapItem in response.mapItems {
let place = MKPointAnnotation()
place.title = mapItem.name
place.coordinate = mapItem.placemark.coordinate
self.mapView.addAnnotation(place)
}
}
}
}
解决方案
弄清楚了。
localSearch = MKLocalSearch(request: request) 高于我的代码的区域和搜索条件语句:
localSearch = MKLocalSearch(request: request)
request.naturalLanguageQuery = place
request.region = mapView.region
正确的代码是:
request.naturalLanguageQuery = place
request.region = mapView.region
localSearch = MKLocalSearch(request: request)
推荐阅读
- scala - 在 AWS Glue 上使用 Deequ
- typescript - 混合手动声明和推断类型
- java - 用于验证 Dto 的 Csutom 注释包含两个使用 java 验证和 Spring Boot 的列表
- c# - Mailkit 以编程方式连接到 Office365
- kubernetes - 为什么匹配的持久卷不绑定到匹配的持久卷声明(使用 k3s)?
- google-cloud-platform - 如何使用大查询导出数据语句创建文件名中包含日期的文件
- python - 如何显示 matplotlib 中的所有标签?
- git - 如何清除(删除)所有合并的本地分支?
- oracle - 在oracle中从句子中提取单词
- ffmpeg - 检索rtsp时如何将连接超时添加到ffmpeg命令?