SwiftUI Map 混合注释
Posted
技术标签:
【中文标题】SwiftUI Map 混合注释【英文标题】:SwiftUI Map mixing up annotations 【发布时间】:2021-07-21 06:53:12 【问题描述】:我已将我的 Map View 连接到一组自定义 Product
对象,这些对象存储每个注释的相关详细信息(称为 MapAnnotationButton
的自定义注释)。
有可能进行搜索,每次将搜索请求发送到我的后端时,响应都会转换为 Product
对象并保存到数组中(数组的先前内容正在被清除)。然而,由于某种原因,在第一次搜索后,我的地图注释混淆了。每次搜索(相同的短语)时,它都会被打乱。虽然从来没有第一次。
我已经检查过了,但即使在注释创建块中,坐标和名称及其他属性也匹配。
import SwiftUI
import MapKit
struct MapView: View
@State var keyword = ""
@State private var region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 0, longitude: 0), span: MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1))
@State var products: [Product] = []
var body: some View
ZStack(alignment: Alignment(horizontal: .center, vertical: .top), content:
Map(coordinateRegion: $region, annotationItems: self.products, annotationContent: current_item in
MapAnnotation(coordinate: current_item.location?.CLcoordinates ?? CLLocationCoordinate2D(latitude: 1000, longitude: 1000))
MapAnnotationButton(item: current_item)
)
TextField("Search", text: $keyword, onEditingChanged: editing in
, onCommit:
UIApplication.shared.endEditing()
BackendClient.shared.query(keyword: keyword) products, success in
self.products = products ?? []
)
)
我的解释是,当注释创建块被调用时,根据其内容,大约是 products
中包含的项目数的 2 倍 - 4 倍,可能在正确的注释之上存在注释。这意味着它似乎只是混淆了,实际上只有其他注释阻止了下面的正确注释。
然而,实际上每个注释都应该放在正确的位置,绝不允许发生这样的事情。
我会非常感谢您的提示和想法! 谢谢!
第一次搜索:
第二次搜索:
【问题讨论】:
你能解释一下你所说的洗牌是什么意思吗?为什么洗牌是个问题? 对不起,我的错。当我再次查询时,注释会随机重新排列。这不应该是这样,因为Product
的每个项目都被分配了一个特定的位置。
您将动词 shuffled 替换为 rearranged。这没有帮助。你怎么知道/看到注释被打乱了,为什么这是一个问题?
我添加了两张图片;我希望他们提供更多背景信息。
现在很清楚了。你能添加Product
和MapAnnotationButton
的代码吗?
【参考方案1】:
据我所知,SwiftUI 框架中似乎存在错误。出于某种原因,如果视图位于单独的结构中,它们将不会得到更新。如果我从 MapAnnotationButton 直接复制到 MapAnnotation 视图块中,一切都很好。
我已经提交了雷达。
感谢您的 cmets!
【讨论】:
以上是关于SwiftUI Map 混合注释的主要内容,如果未能解决你的问题,请参考以下文章
在SwiftUI项目中使用UIKit(SwiftUI和UIKit混合开发)
如何从 MKMapView didSelect 注释更新封装的 SwiftUI 视图