在点击和显示 MKMapView 上的注释的标注之间几乎有 0.5 秒的延迟。
有谁知道为什么会这样,以及如何在用户点击地图时使其立即响应?
即使用户位置注释在点击时在标注中显示“当前位置”,也会发生这种情况。我希望它在点击时立即显示,没有奇怪的延迟。
编辑:我认为这是由于 didSelectAnnotationView 调用的 setSelected 函数。setSelected 有一个可能会减慢它的“动画”属性。如何消除该动画?
不幸的是,您对此无能为力。与在 Mobile Safari 中点击链接很慢的原因完全相同:手势识别器必须争先恐后地决定您是否可能在滚动(拖动),然后才能同意您点击。
所以,它与动画无关。在这种情况下,这只是手势识别的本质。
小智 8
经过大量研究,我找到了解决方案!它有一点点hacky,但它的作用就像一个魅力。
秘诀是,当关闭地图缩放时, didSelect 侦听器会立即触发。由于我们需要缩放(当然),我们需要做的是暂时禁用缩放,仅在 didSelect 事件发生的那一刻!
在斯威夫特:
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
gestureRecognizer.numberOfTapsRequired = 1
gestureRecognizer.numberOfTouchesRequired = 1
gestureRecognizer.delegate = self
mapView.addGestureRecognizer(gestureRecognizer)
Run Code Online (Sandbox Code Playgroud)
和
@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
}
}
Run Code Online (Sandbox Code Playgroud)
此手势事件在 didSelect 事件之前触发。所以当 didSelect 事件被调用时,缩放被关闭并且它不会延迟触发!
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
mapView.isZoomEnabled = true // Not really necessary
// Triggered immediately, do something
}
Run Code Online (Sandbox Code Playgroud)
注意:这会禁用地图的 doubleTap 手势,但我想它们不会被使用太多。因此,如果您想要快速响应,则需要接受它!
| 归档时间: |
|
| 查看次数: |
1051 次 |
| 最近记录: |