我有一张带大头针的地图。当我点击管脚时,自定义标注显示为UIView。当我在calloutView内部点击时,应该没有任何反应。如果我在视图外部点击,自定义calloutView应该会消失。但我不知道如何实现它,要么它在视图内外轻敲就会消失,要么根本不会消失。
我处理攻丝的方法:
func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
if view == customCallout {
return
} else {
customCallout?.removeFromSuperview()
}
}在这种情况下,它将在两次点击上删除自定义标注。在这里我创建了标注:
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
if view.annotation is MKUserLocation {
return
}
//this creates the callout
let views = Bundle.main.loadNibNamed("CustomCalloutView", owner: nil, options: nil)
let calloutView = views?[0] as! CustomCalloutView
calloutView.delegate = self
customCallout = calloutView
}如果我在自定义标注视图内点击,它不会消失,但在我点击外部的情况下,它确实会消失,我如何实现这一点?
发布于 2020-04-07 14:03:22
旧的Location and Maps Programming Guide概述了这一过程。该技术涉及为注释视图实现一个hitTest方法,该方法在自定义标注中包含命中。否则,触摸不会被识别为注释视图和/或标注的一部分,而是在地图上。
正如Guide所说:
当您使用自定义视图而不是标准详图索引时,您需要做额外的工作,以确保在用户与其交互时,您的详图索引适当地显示和隐藏。以下步骤概述了创建包含按钮的自定义标注的过程:
清单6-7响应自定义标注中的命中
清单6-8显示了一个实现setSelected:animated:的示例,以便在用户选择注释视图时动画显示自定义标注视图的到达和取消。
清单6-8添加和删除自定义标注view
现在,上面的显然是Objective-C (清单6-8的实现可能与他们的不同),但基本模式在Swift中是相同的。请参阅此Swift Github存储库,其中演示了如何在CustomMapViewAnnotationCalloutSwift中实现自定义注释视图(包括所需的hitTest行为)。因此,它结合了在注释视图中实现hitTest,以及明显地让callout使用这些接触。
https://stackoverflow.com/questions/61008497
复制相似问题