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。这没有帮助。你怎么知道/看到注释被打乱了,为什么这是一个问题? 我添加了两张图片;我希望他们提供更多背景信息。 现在很清楚了。你能添加ProductMapAnnotationButton的代码吗? 【参考方案1】:

据我所知,SwiftUI 框架中似乎存在错误。出于某种原因,如果视图位于单独的结构中,它们将不会得到更新。如果我从 MapAnnotationButton 直接复制到 MapAnnotation 视图块中,一切都很好。

我已经提交了雷达。

感谢您的 cmets!

【讨论】:

以上是关于SwiftUI Map 混合注释的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI-混合开发

在SwiftUI项目中使用UIKit(SwiftUI和UIKit混合开发)

单击地图注释时的 SwiftUI 操作

如何从 MKMapView didSelect 注释更新封装的 SwiftUI 视图

在 MapBox SwiftUI 中使用自定义注释图像 [关闭]

在 SwiftUI 中从 Observable 视图模型初始化 Map