在我的应用程序中,我有一个满是注释的映射工具包,当单击其中一个时,我希望一个新视图向上滑动,其中包含注释的详细信息。如果我错了,请纠正我,但我认为需要创建自定义注释才能实现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()
}
}
}
正如您所看到的,默认注释下面有位置的名称,这是我想要的,但是我希望它在“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/