显示用户坐标 SwiftUI

Posted

技术标签:

【中文标题】显示用户坐标 SwiftUI【英文标题】:Show user coordinates SwiftUI 【发布时间】:2021-08-30 14:31:52 【问题描述】:

我有自定义地图,用户位置上有别针。当我需要显示用户位置时。我尝试使用 CLLocationManager 显示坐标,但它们变成 0.0

struct MapView : UIViewRepresentable 
    
    func makeCoordinator() -> MapView.Coordinator 
        return MapView.Coordinator(parent1: self)
    
    
    @Binding var title : String
    @Binding var subtitle : String
    
    func makeUIView(context: UIViewRepresentableContext<MapView>) ->  MKMapView 
        
        let map = MKMapView()
        let coordinate = CLLocationCoordinate2D(latitude: 55.757485,
                                               longitude: 37.632179)
        map.region = MKCoordinateRegion(center: coordinate,
                                        latitudinalMeters: 100,
                                        longitudinalMeters: 100)
        let annotation = MKPointAnnotation()
        annotation.coordinate = coordinate
        
        map.delegate = context.coordinator
            
        map.addAnnotation(annotation)
        return map
    
    
    func updateUIView(_ uiView: MKMapView, context: UIViewRepresentableContext<MapView>) 

    class Coordinator: NSObject , MKMapViewDelegate 
        
        var parent : MapView
        init(parent1: MapView) 
            parent = parent1
        
        
        func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? 
            
            let pin = MKPinAnnotationView(annotation: annotation,
                                          reuseIdentifier: "pin")
            pin.isDraggable = true
            pin.pinTintColor = .blue
            pin.animatesDrop = true
            
            return pin
        
        
        func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, didChange newState: MKAnnotationView.DragState, fromOldState oldState: MKAnnotationView.DragState) 
            
            CLGeocoder().reverseGeocodeLocation(CLLocation(latitude: (view.annotation?.coordinate.latitude)!,
                                               longitude: (view.annotation?.coordinate.longitude)!)) (places, err) in
                
                if err != nil 
                    print((err?.localizedDescription)!)
                    return
                
                
                self.parent.title = (places?.first?.name ?? places?.first?.postalCode)!
                self.parent.subtitle = (places?.first?.locality ?? places?.first?.country ?? "None")
            
        
    

这是我的起点

let coordinate = CLLocationCoordinate2D(latitude: 55.757485,
                                        longitude: 37.632179)

所以我需要在这个笔划中添加用户坐标而不需要我已经询问过的许可

【问题讨论】:

【参考方案1】:

您所要做的就是使showsUserLocation var 为真。(Look at the docs)

func makeUIView(context: UIViewRepresentableContext<MapView>) ->  MKMapView 
    
    let map = MKMapView()
    let coordinate = CLLocationCoordinate2D(latitude: 55.757485, longitude: 37.632179)
    map.region = MKCoordinateRegion(center: coordinate, latitudinalMeters: 100, longitudinalMeters: 100)
    let annotation = MKPointAnnotation()
    annotation.coordinate = coordinate

    // new code...
    map.showsUserLocation = true

    map.delegate = context.coordinator
        
    map.addAnnotation(annotation)
    return map
    

ios 14 开始,您可以使用原生 SwiftUI Map。这可能比桥接到 UIKit 更容易使用

【讨论】:

是的,我可以做到,但 pin 不在用户位置上 你在用模拟器吗? 我测试了我的手机,它显示了我的位置,但我需要将我的密码与我的坐标连接起来。这就是现在的问题 您上面的代码可以很好地添加一个 pin,您确定您正在获取用户的位置吗?

以上是关于显示用户坐标 SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress中如何根据坐标显示用户?

MapView 以用户坐标为中心缩放

网站;让用户添加位置并获取坐标

根据html中所需的坐标显示图像

android - eclipse:使用使用 gps 获得的坐标显示谷歌地图

如何调整plot的坐标轴的显示位置