Ios 将注释点击到“;选择";真的很慢

Ios 将注释点击到“;选择";真的很慢,ios,swift,mapkit,Ios,Swift,Mapkit,从点击到在MKMapView上显示注释的标注之间几乎有0.5秒的延迟 有人知道为什么会出现这种情况吗?当用户点击地图时,我如何让它立即响应 即使用户位置注释在点击时在详图索引中显示“当前位置”,也会发生这种情况。我希望它在点击时立即显示,没有奇怪的延迟 编辑:我认为这是因为setSelected函数调用了SelectAnnotationView。setSelected的“动画”属性可能会使其变慢。如何消除动画?不幸的是,您对此无能为力。正是出于同样的原因,在移动Safari中点击链接的速度很慢:

从点击到在MKMapView上显示注释的标注之间几乎有0.5秒的延迟

有人知道为什么会出现这种情况吗?当用户点击地图时,我如何让它立即响应

即使用户位置注释在点击时在详图索引中显示“当前位置”,也会发生这种情况。我希望它在点击时立即显示,没有奇怪的延迟


编辑:我认为这是因为setSelected函数调用了SelectAnnotationView。setSelected的“动画”属性可能会使其变慢。如何消除动画?

不幸的是,您对此无能为力。正是出于同样的原因,在移动Safari中点击链接的速度很慢:手势识别器在同意你点击之前,必须先争一段时间来决定你是否在滚动(拖动)


所以,它与动画无关。这就是这种情况下手势识别的本质。

在做了大量研究后,我找到了解决方法!这有点老套,但很有魅力

秘密在于,当关闭地图缩放时,didSelect侦听器会立即触发。由于我们需要缩放(当然),我们需要做的是,暂时禁用缩放,就在didSelect事件发生时

迅速:

let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
gestureRecognizer.numberOfTapsRequired = 1
gestureRecognizer.numberOfTouchesRequired = 1
gestureRecognizer.delegate = self
mapView.addGestureRecognizer(gestureRecognizer)

此手势事件在didSelect事件之前触发。因此,在调用didSelect事件的那一刻,zoom就关闭了,它会毫不延迟地触发

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    mapView.isZoomEnabled = true // Not really necessary
    // Triggered immediately, do something
}

注意:这将禁用地图的双击手势,但我想它们不会被太多使用。所以,如果你想要快速的反应,你需要接受它

如果我删除滚动/拖动/其他手势,或者在每个annotationView顶部添加一个按钮,并使用该按钮指示是否选中了它,该怎么办?因为按钮没有碰撞问题。如果您正在考虑删除滚动手势,那么为什么不关闭
scroll enabled
zoomEnabled
?需要地图来滚动和缩放。。。但我明白你的意思了——地图视图正在检测触摸,然后检查它是否是滚动,然后是拖动,然后是点击。有没有办法告诉地图视图“让注释先检查,然后检查是否被触碰”?这种情况经常发生,我用一个普通的地图视图尝试过。见鬼,在FindMyFriends中试试,然后点击你的位置——这与我试图消除的“延迟”量完全相同。然而,这不是调用——即使使用canshowcault=false,它仍然是相同的delay.OMG!这太棒了!我打算用我自己的手势识别器重新实现注释选择,这将涉及处理相当多的边缘情况。这节省了我很多时间。非常感谢。
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    mapView.isZoomEnabled = true // Not really necessary
    // Triggered immediately, do something
}