MapView:UIViewRepresentable 不以获取的列表为中心

Posted

技术标签:

【中文标题】MapView:UIViewRepresentable 不以获取的列表为中心【英文标题】:MapView: UIViewRepresentable do NOT center to fetched listings 【发布时间】:2021-05-05 13:53:57 【问题描述】:

我尝试创建一个地图,其中填充了从核心数据中提取的列表。抓取是完美的,但地图没有以列表位置为中心。 例如,所有列表都位于美国,但我的地图显示罗马尼亚(我的位置)。

如何让地图显示获取列表的区域。

import SwiftUI
import UIKit
import MapKit


struct MapView: UIViewRepresentable 
    
    @StateObject var jsonModel = JSONViewModel()
    @Environment(\.managedObjectContext) var context
    @FetchRequest(entity: Listing.entity(), sortDescriptors:[NSSortDescriptor(keyPath: \Listing.publishdate, ascending: false)])
    
    var results : FetchedResults<Listing>

    func updateUIView(_ uiView: MKMapView, context: UIViewRepresentableContext<MapView>) 
        
        @State var center: CLLocationCoordinate2D?
        @State var zoom: MKCoordinateSpan
        // original
        var allAnnotations: [MapAnnotationPin] = []
        
        for data in results 
            
            let title = data.listingtype
            let subtitle: String = "\(data.saleprice < 1 ? data.rentprice : data.saleprice) EUR"
            
            let coordinate = CLLocationCoordinate2D(latitude: data.latitude, longitude: data.longitude)
            
            allAnnotations.append(MapAnnotationPin(title: title, subtitle: subtitle, coordinate: coordinate))
           
        
        uiView.annotations.forEach  uiView.removeAnnotation($0) 
        uiView.addAnnotations(allAnnotations)
    
    
    func makeUIView(context: UIViewRepresentableContext<MapView>) -> MKMapView 
        return MKMapView()
    



class MapAnnotationPin: NSObject, MKAnnotation 
    let title: String?
    let subtitle: String?
    let coordinate: CLLocationCoordinate2D
    
    init(title: String?, subtitle: String?, coordinate: CLLocationCoordinate2D) 
        
        self.title = title
        self.subtitle = subtitle
        self.coordinate = coordinate
    

【问题讨论】:

在方法updateUIView调用uiView.setRegion(myFavoriteRegion, animated: true) 感谢您的回答!此外,我还想点击图钉以查看列表详情,或在地图顶部显示一个小视图。我怎样才能做到这一点? 如果你不想显示太多,标注就是你要找的raywenderlich.com/7738344-mapkit-tutorial-getting-started 【参考方案1】:

谢谢格德!

使其工作的最终代码:

let span = MKCoordinateSpan(latitudeDelta: 2.0, longitudeDelta: 2.0)     
let myFavoriteRegion = MKCoordinateRegion(center: coordinate, span: span)
uiView.setRegion(myFavoriteRegion, animated: true)

【讨论】:

以上是关于MapView:UIViewRepresentable 不以获取的列表为中心的主要内容,如果未能解决你的问题,请参考以下文章

如何使用包含 MapView 的包装 TabHost,该 MapView 在其下方显示 AdMob 视图?

MapView 的 onDestroy() 导致 UninitializedPropertyAccessException

在加载 ViewController 之前加载 MapView

MapView 的 UIImageView 子视图

iPhone:mapView.showUserLocation。 VS locationUpdate 函数

安卓; MapView,如何设置默认位置?