在我的应用程序中,我有一个满是注释的映射工具包,当单击其中一个时,我希望一个新视图向上滑动,其中包含注释的详细信息。如果我错了,请纠正我,但我认为需要创建自定义注释才能实现didSelect()方法。
问题是,默认情况下,弹出的自定义注释没有注释的名称,就像默认的mapkit注释一样,而且由于我一次有大约20个注释,所以用户无法知道他们在选择什么。
关于如何在自定义注释下面添加带有注释名称的标题或标签,有什么想法吗?我不想在注释上方弹出一个调用,因为我正在让视图向上滑动,填充注释数据。
以下是我所拥有的:

extension ViewController : MKMapViewDelegate {

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    if annotation is MKUserLocation { return nil }



    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "pin") as? MKPinAnnotationView

    if annotationView == nil {

        annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "pin")

        annotationView?.animatesDrop = true

        annotationView?.canShowCallout = false

    } else {

        annotationView?.annotation = annotation

    }



    return annotationView

}



func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {

    UIView.animate(withDuration: 0.2) {
        // the view that will hold the annotations data

        self.annotationInfoViewBottomConstraint.constant = 0

        self.view.layoutIfNeeded()

    }

}

}

swift - 在自定义注解mapkit swift的前面/下面添加标题-LMLPHP
swift - 在自定义注解mapkit swift的前面/下面添加标题-LMLPHP
正如您所看到的,默认注释下面有位置的名称,这是我想要的,但是我希望它在“pin”外观的自定义注释下面。

最佳答案

您可以创建如下标签:

let annotationLabel = UILabel(frame: CGRect(x: -40, y: -35, width: 105, height: 30))
annotationLabel.numberOfLines = 3
annotationLabel.textAlignment = .center
annotationLabel.font = UIFont(name: "Rockwell", size: 10)
// you can customize it anyway you want like any other label

设置文本:
annotationLabel.text = annotation.title!!

然后添加到批注视图:
annotationView.addSubview(annotationLabel)

Picture of annotation with label
我还添加了一个背景和边框:
annotationLabel.backgrounColor = UIColor.white
annotationLabel.layer.cornerRadius = 15
annotationLabel.clipsToBounds = true

也可以在创建标签时通过更改x和y来更改标签相对于注释的位置。负的是向左和向上,正的是向右和向下。

关于swift - 在自定义注解mapkit swift的前面/下面添加标题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50744840/

10-10 21:05