我在地图上选择了多个标记。标记选择工作正常并映射委托方法
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView){}
被称为。
需要:
当显示标注时,我将取消选择标注其标注需要取消选择的标记。
二手堆栈
xCode
与swift 4.2
Apple
MapKitMKAnnotationView
作为自定义标记class ArtworkView: MKAnnotationView {
var locItem:LocationItem = LocationItem()
override var annotation: MKAnnotation? {
willSet {
guard let artwork = newValue as? Artwork else {return}
locItem = artwork.locItem
if(!artwork.isUser){
canShowCallout = true
calloutOffset = CGPoint(x: -5, y: 5)
rightCalloutAccessoryView = nil
if let imageName = artwork.imageName {
image = UIImage(named: imageName)
} else {
image = nil
}
detailCalloutAccessoryView = detailLabel
}else{
canShowCallout = false
calloutOffset = CGPoint(x: -5, y: 5)
rightCalloutAccessoryView = nil
image = UIImage(named: "gifcurrentloc")
detailCalloutAccessoryView = nil
}
}
}
在showCallout()/hideCallout()
,通过地图使用selectAnnotation:/deselectAnnotation:
。
在showCalloutView:
/ hideCalloutView:
,不要在setSelected:
上打电话给MKAnnotationView
。
您不应该直接调用此方法。 MKMapView
对象调用此方法以响应用户与注释的交互。
您应该尝试使用deselectAnnotation
mapView
方法outlet
,例如:
mapView?.deselectAnnotation(annotation: yourAnnotation, animated: false)