iOS - 选择/取消选择Apple地图中的标记不起作用

问题描述 投票:1回答:2

我在地图上选择了多个标记。标记选择工作正常并映射委托方法 func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView){}被称为。

  • 当显示标注时,我将取消选择标注其标注的标记。没啥事儿。
  • 显示标注时,我点击任何其他位置,然后取消选择上一个标记,它将取消选择标记。

需要:

当显示标注时,我将取消选择标注其标注需要取消选择的标记。

二手堆栈

  • xCodeswift 4.2
  • Apple MapKit
  • MKAnnotationView作为自定义标记

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
    }

  }
}
ios mapkit mkmapview mkannotation mkannotationview
2个回答
0
投票

showCallout()/hideCallout(),通过地图使用selectAnnotation:/deselectAnnotation:

showCalloutView: / hideCalloutView:,不要在setSelected:上打电话给MKAnnotationView

您不应该直接调用此方法。 MKMapView对象调用此方法以响应用户与注释的交互。


0
投票

您应该尝试使用deselectAnnotation mapView方法outlet,例如:

mapView?.deselectAnnotation(annotation: yourAnnotation, animated: false)
© www.soinside.com 2019 - 2024. All rights reserved.