【发布时间】:2020-04-19 06:24:56
【问题描述】:
我想捕捉对MKMarkerAnnotationView 的点击,并且在发生这种情况时不为视图设置动画。
通过我的MKMapView 的代表,我可以捕获大致相当于点击MKMarkerAnnotationView 的选择和取消选择(点击不属于MKMarkerAnnotationView 的标签时也会发生选择)
我正在尝试删除默认动画。我没有找到一个简单的解决方案。
我试过了:
1/ 在选择过程中将视图设置为未选中。这确实会取消动画,但不会捕获更多的点击。
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
view.setSelected(false, animated: false)
// or
view.isSelected = false
handleTap(view)
}
2/ 在视图上添加另一个点击手势识别器并阻止其他手势识别器接收触摸。这很好用,除非我点击标签而不是注释视图。
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
let view = dequeueReusableAnnotationView(withIdentifier: reuseIdentifier) as? MKMarkerAnnotationView ??
MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier)
view.annotation = annotation
view.gestureRecognizers?.forEach { view.removeGestureRecognizer($0) }
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTap(gesture:)))
gestureRecognizer.delegate = self
view.addGestureRecognizer(gestureRecognizer)
return view
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return false
}
【问题讨论】:
标签: ios mapkit mapkitannotation