所以我有一张带有大量注释的地图。每个注释都具有默认的标注视图,该视图附加了我创建的按钮,据称该按钮会将用户带到另一个视图控制器。首先,此按钮可以正常工作,但对于某些注释,除非我放大注释或再次单击注释,否则它不会注册触摸。我很失落。这是我的代码。
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
var annotationView = MKAnnotationView()
guard let annotation = annotation as? LocationAnnotation else {return nil}
var identifier = ""
switch annotation.type {
case .nightclub:
identifier = "Nightclub"
case .hookahLounge:
identifier = "Hookah Lounge"
case .bar:
identifier = "Bar"
case .bowling:
identifier = "Bowling Alley"
case .arcade:
identifier = "Arcade"
case .pool:
identifier = "Pool"
}
if let dequedView = mapSF.dequeueReusableAnnotationView(withIdentifier: identifier) {
annotationView = dequedView
} else {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
}
annotationView.canShowCallout = true
annotationView.isEnabled = true
let button = UIButton()
button.frame = CGRect(x: 0.0, y: 0.0, width: 30.0, height: 30.0)
let image = UIImage(named: "go")
button.setImage(image, for: .normal)
annotationView.detailCalloutAccessoryView?.backgroundColor = UIColor.darkGray
annotationView.rightCalloutAccessoryView = button
}
这是标注附件功能,该功能最初可以运行,但不能在随机时间运行。
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
print("true button tapped")
}
同样,我的问题是print语句不会针对各种注释执行。每当我按下标注中的按钮时,控制台都会打印出该语句,但在其他情况下则不会。我不知道为什么。任何帮助将不胜感激,因为这是我应用程序中最后剩下的错误之一。
答案 0 :(得分:1)
这对我来说现在有点老了,但我找到了解决方法。为了获得对标注中按钮的触摸,我只需要添加一行annotationView.isUserInteractionEnabled = false
。不论地图是否始终被放大,我在标注按钮中的图像都是交互式的。多么奇怪的情况,但是它畅通无阻。