【问题标题】:Don't animate MKMarkerAnnotationView when selected选择时不要为 MKMarkerAnnotationView 设置动画
【发布时间】: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


    【解决方案1】:

    您可以尝试覆盖类:

    final class CustomMarkerAnnotationView: MKMarkerAnnotationView {
      var onSelect: (() -> Void)?
    
    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(false, animated: false)
        if selected {
          onSelect?() // or catch this in delegate
        }        
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2014-07-06
      • 2018-08-22
      相关资源
      最近更新 更多