在点击 MKMapView 上的注释和显示标注之间有近 0.5 秒的延迟。
有谁知道为什么会出现这种情况,以及当用户点击地图时如何使其立即响应?
即使用户位置注释在点击时在标注中显示“当前位置”,也会发生这种情况。我希望它在点击时立即显示,没有奇怪的延迟。
编辑:我认为这是由于 didSelectAnnotationView 调用的 setSelected 函数造成的。 setSelected 有一个“动画”属性,可能会减慢速度。如何消除该动画?
经过大量研究后,我找到了解决方案!虽然有点老套,但是却很有魅力。
秘密在于,当关闭地图缩放时,didSelect 侦听器会立即触发。由于我们需要缩放(当然),我们需要做的是,暂时禁用缩放,只是为了 didSelect 事件的那一刻!
在斯威夫特中:
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
gestureRecognizer.numberOfTapsRequired = 1
gestureRecognizer.numberOfTouchesRequired = 1
gestureRecognizer.delegate = self
mapView.addGestureRecognizer(gestureRecognizer)
and
@objc func handleTap(_ sender: UITapGestureRecognizer? = nil) {
// disabling zoom, so the didSelect triggers immediately
mapView.isZoomEnabled = false
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.mapView.isZoomEnabled = true
}
}
该手势事件在 didSelect 事件之前触发。因此,在调用 didSelect 事件的那一刻,缩放功能就会关闭,并且会立即触发!
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
mapView.isZoomEnabled = true // Not really necessary
// Triggered immediately, do something
}
注意:这会禁用地图的双击手势,但我猜它们不会被太多使用。因此,如果您想要快速响应,则需要忍受它!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)