• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - swift 4 来自 json 的注释在用户拖动 map 之前不可见

[复制链接]
菜鸟教程小白 发表于 2022-12-11 22:39:06 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在 map 上显示注释时遇到问题。它们仅在我移动或拖动 map 时显示。

我尝试关注 youtube 上的教程以及其中一个问题是 c sharp

请帮帮忙..这是代码

这里我为注解创建了一个类

  class customPin: NSObject, MKAnnotation {
    var coordinate: CLLocationCoordinate2D
    var title: String?
    var subtitle: String?

    init(pinTitle:String, pinSubTitle:String, location:CLLocationCoordinate2D) {
        self.title = pinTitle
        self.subtitle = pinSubTitle
        self.coordinate = location
    }}

    class ViewController: UIViewController, CLLocationManagerDelegate {

    @IBOutlet weak var mapView: MKMapView!

     var locationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()

        mapView.register(CustomAnnotationView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)

        self.locationManager.requestWhenInUseAuthorization()


        //json show the list of the parks


pipiCanList()

     //show location Barcelona
    let location = CLLocationCoordinate2D(latitude: 41.3851   , longitude:2.1734)
    let region = MKCoordinateRegion(center: location, span: MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05))

    self.mapView.setRegion(region, animated: true)
    self.mapView.delegate = self

}

get the json information

 func pipiCanList(){

        let url = "http://bluewave.lk/Apps/pipiCan/Api/read.php";
        let urlObj = URL(string:url);

        URLSession.shared.dataTask(with: urlObj!) {(data, response, error) in
            do{
                let pipiCans = try JSONDecoder().decode([pipiCanDBList].self, from: data!)

                for pipiCan in pipiCans{

                    let Latitude = (pipiCan.ParkLatitude! as NSString).doubleValue
                    let Longitude = (pipiCan.ParkLongitude! as NSString).doubleValue
                    let  location = CLLocationCoordinate2D(latitude: Latitude, longitude: Longitude)

                    //add to
                    let pin = customPin(pinTitle: pipiCan.ParkName!, pinSubTitle: pipiCan.Area!, location:  location)
                    self.mapView.addAnnotation(pin)

                  }
            } catch{

                print ("Error - cannot get list")

            }
            }.resume()


    }
}    



Best Answer-推荐答案


你需要

DispatchQueue.main.async { 
    let pin = customPin(pinTitle: pipiCan.ParkName!, pinSubTitle: pipiCan.Area!, location:  location)
    self.mapView.addAnnotation(pin)
}

由于 URLSession.shared.dataTask 回调在后台线程中,您应该在主线程中访问 UIKit 元素,例如 mapView 您可以也可以

self.mapView.showAnnotations(self.mapView.annotations, animated: true)

在for循环之后显示所有添加的注解还记得你在这里设置一个区域

 let location = CLLocationCoordinate2D(latitude: 41.3851   , longitude:2.1734)
let region = MKCoordinateRegion(center: location, span: MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05))

响应的位置值可能比上述区域远

关于ios - swift 4 来自 json 的注释在用户拖动 map 之前不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55347525/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap