选中时不对 MKMarkerAnnotationView 进行动画处理



我想捕获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
}

你可以尝试覆盖类:

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
}        
}
}

覆盖对我不起作用。以下是最终对我有用的东西(Objc(:

- (void)mapView:(MKMapView *)mapView
didSelectAnnotationView:(MKAnnotationView *)view
{
//stops animation
for( CALayer *sublayer in view.layer.sublayers )
{
[sublayer removeAllAnimations];
}

//stops selection
[view setSelected:NO animated:NO];
}

出于我自己的目的,我改用了以下内容,因为它允许在选择后立即再次点击引脚时正确取消选择引脚。

- (void)mapView:(MKMapView *)mapView
didSelectAnnotationView:(MKAnnotationView *)view
{
//stops animation
for( CALayer *sublayer in view.layer.sublayers )
{
[sublayer removeAllAnimations];
}

//stops selection
[mapView deselectAnnotation:view.annotation animated:NO];
}

相关内容

  • 没有找到相关文章

最新更新