我想在注解覆盖中使用identifier
编号创建MKPointAnnotaion
,而不是引脚。因此,第一个注解为1
,第二个注解为2
,依此类推。
首先,我在UILongPressGestureRecognizer
的基础上向mapView
添加了MKPointAnnotation
。
在mapView(_:viewFor:)
中,我想对这些注解进行样式化。这在一定程度上是可行的,但也给我们带来了问题:
我创建了一个类CustomAnnotation
来添加一个identifier
到我的MKPointAnnotaion:
class CustomAnnotation: MKPointAnnotation {
var identifier: Int!
}
我在注册UILongPressGesture
时设置了identifier
:
let annotation = CustomAnnotation()
annotation.identifier = mapView.annotations.count
然后我使用mapView(_:viewFor:)
来改变我的MKPointAnnotaion
的外观。但是我不知道如何设置annotationView.glyphText
,以便它为每个单独创建的注解使用之前定义的identifier
。
extension ViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
guard annotation is CustomAnnotation else { return nil }
let annotationView = MKMarkerAnnotationView()
annotationView.glyphTintColor = .white
annotationView.glyphText = "44"
return annotationView
}
}
1条答案
按热度按时间mnemlml81#
感谢您@Gerd Castan参考kodeco上的非常广泛的教程
下面我简要给予一下我是如何解决问题的--这可能会对将来的人有所帮助。
首先,我将
CustomAnnotation
类的类型从MKPointAnnotation
更改为MKAnnotation
。现在它实际上适用于每个Map Annotation用例。然后,我为
CustomAnnotation
的视图表示创建了一个类,名为CustomAnnotationView
。在本例中,类型是MKMarkerAnnotationView
,但如果不希望将注解表示为标记,也可以使用MKAnnotationView
。上面代码单元格的一个注解:
1.如果您不希望在标记中使用字母表示,则只需删除上面
let alphabeticRepresentation = UnicodeScalar(number+1+64)!
示例中的以下代码行在我的
UILongPressureGesture
处理程序中,我设置了identifier
,所以只计算CustomAnnotaion
的数量。在MapViewController的
viewDidload()
中,我注册了CustomAnnotationView
就这样