【问题标题】:Add Annocation in Alamofire closure在 Alamofire 关闭中添加公告
【发布时间】:2020-11-05 13:56:27
【问题描述】:

我正在尝试在地图上添加来自服务器的位置和标题标签的注释,我尝试这样做

Services.MyService(pagingParams: pagingparam1, completed: {ret in
        self.getAdverts = ret
        for elements in self.getAdverts{
              
                let coordinates : CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: CLLocationDegrees(elements.LOCATIONS[0])!, longitude: CLLocationDegrees(elements.LOCATIONS[1])!)
                pinCords.coordinate = coordinates
                pinCords.title = String(elements.PRICE!)
                self.map.addAnnotation(pinCords)
           
        }


    })

在 MKMapViewDelegate 中,我尝试显示通知:

extension MapViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
       if annotation is MKUserLocation == true
    {

        return nil
    }
    
           let av = MKAnnotationView(annotation: annotation, reuseIdentifier: "offercount")

    let annoIcon = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
    annoIcon.contentMode = .scaleAspectFit
   
    annoIcon.image = UIImage(named: "cancel-red")
    
    lbl.text = annotation.title!

    lbl.backgroundColor = UIColor.clear
    lbl.textAlignment = .center
    lbl.textColor = .white
    lbl.alpha = 1
    lbl.numberOfLines = 1
    lbl.adjustsFontSizeToFitWidth = true

    lbl.font = UIFont.systemFont(ofSize: 12)

    lbl.layer.masksToBounds = true
    


    av.backgroundColor = AreaColors.advertColor
    av.canShowCallout = true
    av.frame = CGRect(x: 0, y: 0, width: annoIcon.frame.size.width + lbl.frame.size.width + 4, height: 20)
    av.layer.cornerRadius = av.layer.bounds.height/4
    
    let pinlbl = UILabel(frame: CGRect(x:av.layer.bounds.width/2-10, y:av.layer.bounds.height-10, width:20, height:20))
    pinlbl.layer.masksToBounds = true
    pinlbl.layer.cornerRadius = 20
    pinlbl.backgroundColor = AreaColors.advertColor
    av.addSubview(pinlbl)
    av.addSubview(annoIcon)
    av.addSubview(lbl)


    return av
}

绿色视图中有一个标签,图片在下方

只有 1 个 annocation.title 出现其他人没有。但是当我点击任何公告时,我可以看到标题。

我认为问题在于异步关闭,但我真的没有解决它。我做错了吗?

【问题讨论】:

    标签: ios swift annotations mkmapview


    【解决方案1】:

    看起来您正在重用您的 lbl 并将其添加到每个注释中,因此您只能在最后一个注释中看到它。您必须为每个注释创建新的UILabel 并将其添加为子视图,就像您对pinlbl 所做的那样,因为您现在拥有的是从先前的注释中删除lbl 并将其重新添加到下一个,直到它停止并将其保留在地图上的最后一个注释中。

    只需更改以下内容

    annoIcon.image = UIImage(named: "cancel-red")
    // create new label here
    let lbl = UILabel()
    
    // the rest of your code can stay the same
    

    【讨论】:

    • 感谢我所做的工作。我使用 annocation.title 将价格数据发送到 annocations,当我点击 annocation 标题时出现。我只是用它来向其中发送数据。我怎样才能删除它?
    • 您不需要删除它,只需为您的** MKAnnotationView** 的标题创建UILabel 的新实例。可以在annotation.title 中传递数据,看看我更新的答案。
    猜你喜欢
    • 2019-07-28
    • 2012-02-29
    • 1970-01-01
    • 2017-09-06
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    相关资源
    最近更新 更多